【shell编程入门】函数

发布时间:2024年01月21日

函数定义

?使用 function 关键字或直接使用 () 定义函数。

function my_function {
    # 函数体
}

函数调用

?通过函数名和参数列表来调用函数。

my_function arg1 arg2

传递参数

通过 $1, $2, $3, ... 来访问传递给函数的参数。

function example {
    local param1=$1
    local param2=$2
    # ...
}

返回值

使用 return 语句返回一个值。?

function add {
    local result=$(( $1 + $2 ))
    echo $result
}

局部变量

使用 local 关键字声明局部变量,以避免变量在函数外部污染全局命名空间。

function example {
    local local_variable="I am local"
    # ...
}

Shell函数实战

?计算文件行数、单词数和字符数,并输出结果

#!/bin/bash

# 函数:计算文件行数、单词数和字符数
function analyze_file {
    local filename=$1

    if [ -f "$filename" ]; then
        lines=$(wc -l < "$filename")
        words=$(wc -w < "$filename")
        characters=$(wc -m < "$filename")

        echo "File Analysis for $filename:"
        echo "Lines: $lines"
        echo "Words: $words"
        echo "Characters: $characters"
    else
        echo "Error: File $filename not found."
    fi
}

# 函数:显示文件内容
function display_file {
    local filename=$1

    if [ -f "$filename" ]; then
        echo "File Content of $filename:"
        cat "$filename"
    else
        echo "Error: File $filename not found."
    fi
}

# 主程序
echo "Enter the filename:"
read input_file

analyze_file "$input_file"
display_file "$input_file"

反转字符串

function reverse_string {
    local input=$1
    echo $input | rev
}

reversed=$(reverse_string "Hello")
echo "Reversed string: $reversed"

提取子字符串

function extract_substring {
    local input=$1
    local start=$2
    local length=$3
    echo ${input:$start:$length}
}

substring=$(extract_substring "Hello World" 6 5)
echo "Substring: $substring"

?打印数组元素

function print_array {
    local array=("$@")
    for element in "${array[@]}"; do
        echo $element
    done
}

fruits=("Apple" "Orange" "Banana")
print_array "${fruits[@]}"

备份文件

function backup_file {
    local filename=$1
    local backup_dir="backup"
    
    if [ ! -d "$backup_dir" ]; then
        mkdir "$backup_dir"
    fi

    cp "$filename" "$backup_dir/"
    echo "Backup of $filename created in $backup_dir/"
}

backup_file "example.txt"

批量处理文件并记录日志

function process_files_and_log {
    local input_dir=$1
    local output_dir="processed_files"
    local log_file="process_log.txt"

    if [ ! -d "$output_dir" ]; then
        mkdir "$output_dir"
    fi

    touch "$log_file"

    for file in "$input_dir"/*; do
        if [ -f "$file" ]; then
            process_file "$file" "$output_dir"
            echo "Processed $file" >> "$log_file"
        fi
    done
}

function process_file {
    local input_file=$1
    local output_dir=$2
    # 实际处理文件的逻辑
    # ...
}

process_files_and_log "/path/to/input_directory"

?计算阶乘

function factorial {
    local n=$1
    if [ $n -eq 0 ] || [ $n -eq 1 ]; then
        echo 1
    else
        local result=1
        for ((i=2; i<=n; i++)); do
            result=$((result * i))
        done
        echo $result
    fi
}

result=$(factorial 5)
echo "Factorial of 5 is: $result"

判断一个数是否为质数

function is_prime {
    local num=$1
    if [ $num -lt 2 ]; then
        echo "Not a prime number"
        return 1
    fi

    for ((i=2; i<=num/2; i++)); do
        if [ $((num % i)) -eq 0 ]; then
            echo "Not a prime number"
            return 1
        fi
    done

    echo "Prime number"
    return 0
}

is_prime 17

文章来源:https://blog.csdn.net/qq_44091004/article/details/135735567
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。