shell脚本for循环、while循环、until循环

发布时间 2023-08-16 19:03:45作者: 行走的泡泡

1.AWK

在 Linux/UNIX 系统中,awk 是一个功能强大的编辑工具,逐行读取输入文本,默认以空格或tab键作为分隔符作为分隔,并按模式或者条件执行编辑命令。而awk比较倾向于将一行分成多个字段然后进行处理。AWK信息的读入也是逐行.
指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以在无交互
的情况下实现相当复杂的文本操作,被广泛应用于 Shell 脚本,完成各种自动化配置任务。

工作原理:

前面提到 sed 命令常用于一整行的处理,而 awk 比较倾向于将一行分成多个“字段”然后再进行处理,且默认情况下字段的分隔符为空格或 tab 键。awk 执行结果可以通过 print 的功能将字段数据打印显示。

命令:awk     选项        模式      处理的动作

-F  指定分隔符
-v  自定义变量
-f  脚本

1.1print动作

 

 

 1.2常见的内置变量

  • FS :指定每行文本的字段分隔符,缺省为空格或制表符(tab)。与 “-F”作用相同 -v "FS=:"

  • OFS:输出时的分隔符

  • NF:当前处理的行的字段个数

  • NR:当前处理的行的行号(序数)

  • $0:当前处理的行的整行内容

  • $n:当前处理行的第n个字段(第n列)

  • FILENAME:被处理的文件名

  • RS:行分隔符。awk从文件上读取资料时,将根据RS的定义就把资料切割成许多条记录,而awk一次仅读入一条记录进行处理。预设值是\n

 

 

 

2.for循环

for是用于已知循环次数的脚本命令

格式: for (变量) in (次数);do (循环的事件);done(结束)

当使用c语言格式表示的时候:for (( 表达式1; 表达式2; 表达式3 )); do 命令; done

例子:

一加到十,连加

 

 十以内的偶数相加

 

 用for编写99乘法表

 2.while和until

while和until与for相比

for需要知道循环次数,while和until只知道停止条件,不知道次数,直到达到条件就会退出,注意需要退出命令,不然会进入死循环。

命令格式:

while
当命令判断为假时停止

until
当命令判断为真时停止

 

#!/bin/bash
数值
while [ 条件 ]    条件为真是do 假时done
do

done
echo

例子,用while求100以内数字相加

 

批量建立用户

 

 

双重循环及跳出循环

  • break跳出单个循环后面加数字2则代表跳出两层循环

  • continue终止某次循环中的命令,但是不会完全终止命令

  • exit直接退出脚本

 

 

 

 菜单

WORDS 变量被展开,生成一个词的列表。展开的词集合被打 在标准错误输出设备上,每个以一个数字做前缀。如果没有 `in WORDS'则假定使用`in "$@"'。PS3提示符会被显示并且从标准输入读入一行 如果该行由被显示的词对应的数字组成,则 NAME 变量被设定为相应的词。如果行为空,则 WORDS 变量和提示符被重新显示。如果读取了文件结束符,则命令完成。读入任何其他的值会导致 NAME 变量被设定为空。读入的行被存放在变量 REPLY 中。COMMANDS 命令在每次选择之后执行直到执行一个 break 命令。

命令格式:
select: select NAME [in 词语 ... ;] do 命令; done

  从列表中选取词并且执行命令。

例子:

点菜菜单

#!/bin/bash
sum=0
PS3="请输入(1-6):"
MENU="
宫保鸡丁
酸菜鱼
鱼香肉丝
佛跳墙
水煮肉片
点菜结束
"

select menu in $MENU
do
case $REPLY in
1)
echo $menu 价格是20
let sum+=20
;;
2)
echo $menu 价格是60
let sum+=60
;;


3)
echo $menu 价格是25
let sum+=25
;;

4)
echo $menu 价格是150
let sum+=150
;;

5)
echo $menu 价格是60
let sum+=60
;;

6)
echo "点菜结束"
break
;;

*)
echo "点菜错误,请重新选择"
;;

esac
done

echo "总价是$sum"