Shell编程(3)

2025 年 4 月 6 日 星期日(已编辑)
2
AI 生成的摘要
此内容由 AI 生成
本节介绍Shell编程中的循环结构,包括for、while和until三种循环的基本语法及使用方法。for循环可遍历命令输出及文件内容,在变量分隔时默认逐行处理。while循环可创建死循环,使用while :进行空语句测试。until循环正好与while相反,当测试条件为假时执行。当循环嵌套时,可使用break和continue控制跳出或继续循环。最后,介绍如何处理命令行位置参数,包括使用$1、$2等读取参数,$*和$@代表所有参数,$#为参数的数量。
这篇文章上次修改于 2025 年 4 月 6 日 星期日,可能部分内容已经不适用,如有疑问可询问作者。

Shell编程(3)

Shell编程(3)

1. 循环

1.1 使用for遍历命令的执行结果

  • 基本语法
for 参数 in 列表
do
  执行命令
done
  • 使用for遍历命令的执行结果
    • 和if一样,也可以使用反引号或$() 方式执行命令,将命令的结果当做列表进行处理
# 批量修改文件后缀
# basename命令用于去掉文件后缀,取出文件名。
# 用法:basename a.mp3 .mp3

for filename in `ls *.mp3` ; do
  name=$(basename $filename .mp3)
  mv $filename $name.mp4
done
  • 使用for遍历变量和文件
    • 列表中包含多个变量,变量用空格分隔
    • 对文本处理,使用文本查看命令取出文件内容
      • 默认逐行处理,如果文本中出现空格会当做多行处理
# 使用数组
for i in {1..9} ; do
  echo $i
done

# 为文件中用户分别创建目录

for name in `cat names.txt`; do
  mkdir /home/$name
done

# 写一个清理脚本

1.2 while

  • 基本语法
while test测试是否成立
do
  执行命令
done
  • 死循环
while test测试一直成立
do
  执行命令
done
  • test测试一直成立

    • 命令执行成功

    • 空语句while :

while : ; do
  echo always
done

1.3 until

  • 基本语法

    until循环与while循环相反,循环测试为假时,执行循环,为真时循环停止

until test测试为假
do 
  执行命令
done
  • 案例
until [ 5 -lt 4 ] ; do 
  echo always
done

1.4 break和continue

  • 循环可以嵌套
  • 循环也可以和判断嵌套
# 检查/etc/profile.d下的sh脚本,并执行
for sc_name in /etc/profile.d/*.sh
do
  # echo $sc_name
  if [ -x $sc_name] ; then
    . $sc_name
  fi
done
  • 循环可以使用break和continue语句在循环中退出
for num in {1..9}
do
  if [ $num -eq 5 ] ; then
    break # 换成continue呢
  fi
  echo $num
done

1.5 使用循环处理位置参数

  • 命令行参数使用$1 $2 读取
  • $0 代表脚本名称
  • *和 @ 代表所有位置参数
  • $# 代表位置参数的数量
# 发现help参数,并输出两次

for pos in $*
do
  if [ "$pos" = "help" ] ; then
    echo $pos $pos
  fi
done

# while改写
while [ $# -ge 1 ]
do
  if [ "$1" = "help" ] ; then
    echo $1 $1
  fi
  shift
done
  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...