ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

【shell编程入门】函数

2026/8/5 8:53:51 拓冰建站 浏览量
【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