文章总结: 本文详细阐述了LinuxShell编程的核心要素,涵盖脚本结构、变量类型、运算符及流程控制。重点讲解了条件判断、循环控制与函数编程技巧,通过丰富代码示例演示了递归、参数传递及错误处理。内容实用,旨在帮助读者掌握Shell开发技能,提升系统运维自动化效率。 综合评分: 80 文章分类: 安全培训
2.2 循环控制
#!/bin/bash
# loop-control.sh
echo"=== Shell循环控制 ==="
# 1. for 循环
echo"1. for循环示例:"
# 数字范围循环
echo"数字循环:"
for i in {1..5}; do
echo" 数字: $i"
done
# 数组循环
fruits=("苹果""香蕉""橙子""葡萄")
echo"数组循环:"
for fruit in"${fruits[@]}"; do
echo" 水果: $fruit"
done
# 文件循环
echo"文件循环:"
for file in /etc/*.conf; do
if [ -f "$file" ]; then
echo" 配置文件: $(basename "$file")"
fi
done
# C风格for循环
echo"C风格循环:"
for ((i=0; i<5; i++)); do
echo" 计数: $i"
done
# 2. while 循环
echo -e "\n2. while循环示例:"
# 条件循环
counter=1
echo"条件循环:"
while [ $counter -le 5 ]; do
echo" 计数: $counter"
((counter++))
done
# 读取文件行
echo"读取文件行:"
while IFS= read -r line; do
echo" 行内容: $line"
done < /etc/passwd
# 无限循环(带退出条件)
echo"无限循环(按Ctrl+C退出):"
whiletrue; do
echo" 当前时间: $(date)"
sleep 1
done &
# 3. until 循环
echo -e "\n3. until循环示例:"
count=1
echo"until循环:"
until [ $count -gt 5 ]; do
echo" 计数: $count"
((count++))
done
# 4. 循环控制语句
echo -e "\n4. 循环控制语句:"
# break 示例
echo"break示例:"
for i in {1..10}; do
if [ $i -eq 6 ]; then
echo" 遇到6,跳出循环"
break
fi
echo" 当前值: $i"
done
# continue 示例
echo"continue示例:"
for i in {1..5}; do
if [ $i -eq 3 ]; then
echo" 跳过3"
continue
fi
echo" 当前值: $i"
done
# 5. 嵌套循环
echo -e "\n5. 嵌套循环示例:"
echo"乘法表:"
for i in {1..3}; do
for j in {1..3}; do
result=$((i * j))
echo -n " $i×$j=$result"
done
echo
done
# 6. 选择循环
echo -e "\n6. select循环(菜单示例):"
PS3="请选择操作 (1-4): "
options=("查看系统信息""查看磁盘使用""查看内存使用""退出")
select opt in"${options[@]}"; do
case$REPLYin
1)
echo"系统信息:"
uname -a
;;
2)
echo"磁盘使用:"
df -h
;;
3)
echo"内存使用:"
free -h
;;
4)
echo"退出程序"
break
;;
*)
echo"无效选项"
;;
esac
done
2.3 函数编程
#!/bin/bash
# function-programming.sh
echo"=== Shell函数编程 ==="
# 1. 基本函数定义和调用
say_hello() {
echo"Hello, $1!"
}
echo"1. 基本函数调用:"
say_hello "World"
say_hello "Linux"
# 2. 函数参数
calculate_sum() {
local sum=0
for num in"$@"; do
((sum += num))
done
echo$sum
}
echo -e "\n2. 函数参数处理:"
result=$(calculate_sum 1 2 3 4 5)
echo"1+2+3+4+5 = $result"
# 3. 函数返回值
is_even() {
local num=$1
if [ $((num % 2)) -eq 0 ]; then
return 0 # 偶数,返回成功
else
return 1 # 奇数,返回失败
fi
}
echo -e "\n3. 函数返回值:"
if is_even 10; then
echo"10是偶数"
else
echo"10是奇数"
fi
if is_even 7; then
echo"7是偶数"
else
echo"7是奇数"
fi
# 4. 局部变量
variable_scope() {
local local_var="局部变量"
global_var="全局变量"
echo"函数内: local_var=$local_var, global_var=$global_var"
}
echo -e "\n4. 变量作用域:"
global_var="初始值"
echo"函数前: global_var=$global_var"
variable_scope
echo"函数后: global_var=$global_var"
# echo "函数后: local_var=$local_var" # 这会报错
# 5. 递归函数
factorial() {
local n=$1
if [ $n -le 1 ]; then
echo 1
else
local prev=$(factorial $((n-1)))
echo $((n * prev))
fi
}
echo -e "\n5. 递归函数:"
echo"5! = $(factorial 5)"
echo"10! = $(factorial 10)"
# 6. 函数库示例
# 模拟一个数学函数库
math_lib() {
case$1in
"add")
echo $(($2 + $3))
;;
"sub")
echo $(($2 - $3))
;;
"mul")
echo $(($2 * $3))
;;
"div")
if [ $3 -ne 0 ]; then
echo $(($2 / $3))
else
echo"错误: 除数不能为0"
return 1
fi
;;
*)
echo"未知操作: $1"
return 1
;;
esac
}
echo -e "\n6. 函数库使用:"
echo"10 + 20 = $(math_lib add 10 20)"
echo"50 - 30 = $(math_lib sub 50 30)"
echo"6 * 7 = $(math_lib mul 6 7)"
echo"100 / 5 = $(math_lib div 100 5)"
# 7. 匿名函数(使用子shell)
echo -e "\n7. 匿名函数(子shell):"
result=$(
local x=5
local y=3
echo $((x * y))
)
echo"5 * 3 = $result"
# 8. 函数作为参数
apply_function() {
local func=$1
local value=$2
$func"$value"
}
double() {
echo $(($1 * 2))
}
square() {
echo $(($1 * $1))
}
echo -e "\n8. 函数作为参数:"
echo"double(5) = $(apply_function double 5)"
echo"square(4) = $(apply_function square 4)"
# 9. 错误处理函数
error_handler() {
echo"错误发生在: ${BASH_SOURCE[1]}:${BASH_LINENO[0]}"
echo"错误信息: $1"
exit 1
}
safe_division() {
if [ $2 -eq 0 ]; then
error_handler "除数不能
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:运维星火燎原 刘军军 刘军军《Linux Shell编程完整指南》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论