流程控制
一、select in循环
select variable in value_list
do
statements
done
取值列表value_list中内容会以菜单的形式显示出来
注意select是无限循环,输入空值不会结束循环,只有遇到break语句,或者Ctrl + D才能结束循环
二、Shell函数
-
函数定义
function name(){ statements [return value] } # [return value] 可写可不写
-
函数调用
- 不传参:
name
- 传参:
name param1 param2 param3
注意Shell 不限制定义和调用的顺序
-
例子:
function getSum(){ local sum=0 for n in $@;do # $@表示所有参数 ((sum+=n)) done return $sum } getSum 10 20 30 40 echo "返回值:$?" # $? 表示函数的退出状态(返回值)
- 在函数内部可以使用
$n
来表示参数次序,比如$1
表示第一个参数,$2
表示第二个参数 - 除了
$n
,还有另外三个比较重要的变量:$#
获取传递参数的个数$@或者$*
可以一次性获取所有的参数- 可以使用
$@
直接遍历函数参数
- 不传参:
输出重定向
-
标准输出重定向
command > file
:以覆盖的方式,将command的正确结果输出到file文件command >> file
:以追加的方式,将command的正确结果输出到file文件
-
标准错误输出重定向
command 2> file
:以覆盖的方式,将command的错误信息输出到file文件command 2>> file
:以追加的方式,将command的错误信息输出到file文件
-
正确输出和错误信息同时保存
command >file 2>&1
:以覆盖的方式,将错误信息和正确输出同时保存在file中command >>file 2>&1
:以追加的方式,将错误信息和正确输出同时保存在file中command >file 2>file2
:以覆盖的方式,将正确的输出结果输出到file中,错误的信息输出到file2中command >>file 2>>file2
:以追加的方式,将正确的输出结果输出到file中,错误的信息输出到file2中
-
注意,在输出重定向中,>表示是覆盖,>>表示追加
-输出重定向的完整写法为fd>file或者fd>>file,其中fd为文件描述符,如果不写则默认为1,也就是标准输出文件。fd和>之间不能有空格,>和file之间可以有空格
输入重定向
-
command < file
:将file文件中的内容作为command的输入 -
command << END
:从标准输入(键盘)读取数据,知道遇到分界符END才停止(分界符可以为任意的字符串,用户自己定义) -
command <file >file2
:将file作为command的标准输入,并将command的处理结果输出到file2中 -
例子:统计文档中有多少行文字
wc
命令可以用来对文本进行统计,包括单词个数、行数和字节数等,用法如下:
wc [选项] [文件名]
其中,-c
为统计字节数,-w
统计单词数,-l
统计行数
则:wc -l <file
-
例子2:逐行读取文件内容
- 使用while循环
while read row;do echo $row done <file.txt
- 使用管道符和while循环
cat file.txt | while read row;do echo $row done