【shell编程入门】函数
函数定义
使用 function 关键字或直接使用 () 定义函数。
function my_function {# 函数体
}
函数调用
通过函数名和参数列表来调用函数。
my_function arg1 arg2
传递参数
通过 $1, $2, $3, ... 来访问传递给函数的参数。
function example {local param1=$1local 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=$1if [ -f "$filename" ]; thenlines=$(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"elseecho "Error: File $filename not found."fi
}# 函数:显示文件内容
function display_file {local filename=$1if [ -f "$filename" ]; thenecho "File Content of $filename:"cat "$filename"elseecho "Error: File $filename not found."fi
}# 主程序
echo "Enter the filename:"
read input_fileanalyze_file "$input_file"
display_file "$input_file"
反转字符串
function reverse_string {local input=$1echo $input | rev
}reversed=$(reverse_string "Hello")
echo "Reversed string: $reversed"
提取子字符串
function extract_substring {local input=$1local start=$2local length=$3echo ${input:$start:$length}
}substring=$(extract_substring "Hello World" 6 5)
echo "Substring: $substring"
打印数组元素
function print_array {local array=("$@")for element in "${array[@]}"; doecho $elementdone
}fruits=("Apple" "Orange" "Banana")
print_array "${fruits[@]}"
备份文件
function backup_file {local filename=$1local backup_dir="backup"if [ ! -d "$backup_dir" ]; thenmkdir "$backup_dir"ficp "$filename" "$backup_dir/"echo "Backup of $filename created in $backup_dir/"
}backup_file "example.txt"
批量处理文件并记录日志
function process_files_and_log {local input_dir=$1local output_dir="processed_files"local log_file="process_log.txt"if [ ! -d "$output_dir" ]; thenmkdir "$output_dir"fitouch "$log_file"for file in "$input_dir"/*; doif [ -f "$file" ]; thenprocess_file "$file" "$output_dir"echo "Processed $file" >> "$log_file"fidone
}function process_file {local input_file=$1local output_dir=$2# 实际处理文件的逻辑# ...
}process_files_and_log "/path/to/input_directory"
计算阶乘
function factorial {local n=$1if [ $n -eq 0 ] || [ $n -eq 1 ]; thenecho 1elselocal result=1for ((i=2; i<=n; i++)); doresult=$((result * i))doneecho $resultfi
}result=$(factorial 5)
echo "Factorial of 5 is: $result"
判断一个数是否为质数
function is_prime {local num=$1if [ $num -lt 2 ]; thenecho "Not a prime number"return 1fifor ((i=2; i<=num/2; i++)); doif [ $((num % i)) -eq 0 ]; thenecho "Not a prime number"return 1fidoneecho "Prime number"return 0
}is_prime 17