shell脚本3---结构化语句

一、for语句

语法

for var in list
do
    commands
done
  • list中的值默认是以空格/制表符/换行符分隔的字符串或数字,如:
for test in a b c
do 
echo $test
done
  • 如果列表中有单引号需要转义,ru
for test in I\'m jack
do
echo "word:$test"
done
  • 如果在单独的数据值中有空格,要用双引号或单引号圈起来
for city in "New York" "New Mexico"
do
echo "city:$city"
done
  • bash shell中的字段分隔符
    IFS(internal field separator)环境变量定义了 bash shell 用作字段分隔符的一系列字符。默认情况下,bash shell会将下列字符当作字段分隔符
  • 空格
  • 制表符
  • 换行符

可以在shell脚本中通过修改IFS的值来修改默认的分隔符,最佳实践是先备份原值:

IFS.OLD = $IFS
IFS='\n'
<use the new IFS  value in code>
IFS=$IFS.OLD
  • 使用通配符读取目录
for file in ls /home/test/*
do
  if [ -d "$file" ]
then
  echo "$file is a directory"
elif [ -f "$file" ]
  echo "$file is a file"
  fi
done

这里判断条件[ -d "$file" ] 必须加双引号,因为目录中可能包含空格等特殊字符,在test命令中,bash shell会将额外的单词当作参数,导致脚本出错。

  • C语言的for命令
    bash shell也支持另一个版本的for循环,看起来和C语言风格的for循环类似,格式如下:
for (( variable assignment; condition; iteration process ))

和bash shell的for循环不同之处:

  • 给变量赋值可以有空格
  • 条件中的变量不以美元符开头
  • 迭代过程中的算式未用expr命令格式
    举例
for (( i=1; i<=10; i++ ))
do
  echo "the next number is $i"
done

二、while & until

  • while语句格式:
while test command
do 
  other commands
done

while语句中的test命令和if-then语句一样。

  • until语句格式
until test command
do
  other commands
done

until语句和while语句相反,只有在test命令返回非零状态码时,才执行语句中的命令,一旦命令返回了退出状态码0,循环就结束了。

三、循环控制语句break和continue

3.1 break
  • 跳出单个循环
  • 跳出内部循环:在处理多个循环时,break语句会 自动终止你所在的最里面的循环
  • 跳出外部循环:有时你在内部循环中,要终止外部循环,break命令接受单个命令行参数值:
break n

n表示要跳出的循环层数,默认时1,表明跳出当前循环。如果设置n为2, break命令会终止下一级的外部循环。

3.2 continue

跳出当前循环,继续执行下一次循环。
和break语句一样,continue命令也允许通过命令行参数指定要继续哪一级的循环

continue n
3.3 循环输出的处理

可以在done命令之后加一个重定向,将结果输出到文件中

for file in ls /home/test/*
do
  if [ -d "$file" ]
  then
    echo "$file is a directory"
  elif 
    echo "$file is a file"
  fi
done > output.txt
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容