while命令的使用
while test command
do
other commands
done
util命令
until test commands
do
other commands
done
文件数据循环 通过改变环境变量IFS,可以迫使for 命令将文件中的每行作为单独的一项来处理
控制循环
break命令 用在处理过程中跳出循环的一种简单方法,可以使用break命令退出任何类型的循环,包括while和until循环
continue命令 提前停止循环命令,而不完全终止循环,
处理循环输出
可以在shell脚本中使用管道或者重定向循环输出结果,使用done命令的末尾添加处理命令来做到
done > output .txt
=======================================================================
处理用户输入
向shell脚本传递数据的最基本方式是使用命令行参数 command line parameters
bash shell将在命令行中输入的所有参数赋值给一些特殊的变量,这些变量称为位置参数positional parameter
$0 是执行程序的名称
$1 是第一个参数
$2 是第二个参数
……
$9 直到第九个参数
如果脚本的命令行参数多于9个,那么可以继续在命令行中添加命令行参数,但是变量名称会变化
第9个变量之后,必须使用大括号括起来,如${10} ${11}
特殊参数变量
$# 可以不必测试每个参数,而只对命令行输入的参数个数进行计数
$* 将命令行中提供的所有参数作为一个单词处理,本质上$*是将多个对象作为一个来处理
$@ 将命令行中提供的所有参数作为同一字符串中的多个单词处理
bash shell提供shift命令来帮助操作命令行参数,shift命令能改变命令行参数的相对位置
使用shift命令是,默认将每个参数变量左移一个位置,于是变量$3的值移给$2,变量$2的值移给$1,而变量$1被丢弃
$0的值和程序名保持不变
shell中使用-来添加选项,--双破折号指示选项列表的结束
使用getopt命令可以接受任意形式的命令行参数选项和参数列表,并自动将这些选项和参数转换为适当的格式
使用命令
set -- `getopt -q ab:c "$@"`
使用set命令的一个选项是双破折号,表示将命令行参数数量替换为set命令行中的值。
更高级的getopts命令
getopts命令为命令行中找到的所有待处理选项和参数生成一个输出,而与getopt不同,
getopts命令顺序的对现有的shell参数变量进行处理
====================================================================
获取用户输入
使用read命令接受标准输入(键盘输入),
使用read命令存在潜在危险,脚本很可能回停下来一直等待用户输入数据,加入-t指定
read命令输入的秒数。
-s可以使得read输入的数据不显示在显示器上,可以作为密码保护
了解输入和输出
STDIN 标准输入 0
STDOUT 标准输出 1
STDERR 标准错误 2
输出错误
$ls -al badfile 2>test4
通过1>符号,定向输出STOUT的ls命令的普通定向重出
可以将STDOUT和STDEER输出,提供定向符号&>
可以使用exec命令通知shell在脚本执行期间定向特定的文件描述符
禁止输出命令
$ls -al > /dev/null