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"
标签:shell,sum,echo,命令,while,循环,awk From: https://www.cnblogs.com/lwqpl/p/17632181.html