12.3 Shell脚本中的选项分析
第一种方式,使用case语句手工处理选项。
第二种方式,使用getopts命令分析选项
语法格式:
getopts option-string variable
option-string是包含所有单字符选项的字符串,这些字符就是getopts要进行分析的。
这些选项应该被赋予一个变量,变量variable就是被赋值变量的变量名。
getopts对命令行所给出的选项进行分析,分析过程为:
1)getopts选项检查所有命令行参数,找到以"-"字符开头的字符。
2)当找到以"-"字符开头的参数后,将跟在"-"字符后的字符与在option-string中的给出的字符进行比
较。
3)若找到匹配,指定的变量variable被设置成选项,否则variable被设置成"?"字符。
4)重复1-3直到遍历完搜索选项
5)当分析完后,getopts返回非零值并推出。
getopts的另一个特征是它可以指出需要额外参数的选项。在option-string中的选项后加上一个":"
字符就可以实现这一功能。在这种情况下,选项被分析后,额外的参数被设置成变量OPTARG的值。
使用getopts
while f:o:v OPTION:
do
case "$OPTION" in
f) F=$OPTION ;;
o) O=$OPTION ;;
v) V=$OPTION ;;
*) echo "$USAGE" ;
exit 1
;;
esac
done
第12学时 输入/输出
当命令产生写向终端的输出时,就称程序将它的输出打印到标准输出(STDOUT)。
出错信息并不写向STDOUT,它们写向一个特殊的类型输出上,该输出称为标准错误输出(STDERR),
它是为出错信息保留的。
13.1.1 向终端输出
1)echo
2)printf
13.1.2 输出重定向
在Shell脚本中,常常需要俘获命令的输出并将其存入文件。当输出存储在文件中时,可以很方便地对其
进行编辑和修改。
重定向操作符 ">","<"
">"符号重定向会覆盖原有文件里的数据,使用时需要注意。
如果需要在原有基础上增加数据,可以使用">>"追加数据到文件的尾部。
向文件和屏幕重定向输出
在某些情况下,需要同时向文件和终端重定向脚本的输出。可使用tee命令。
例如:$ date | tee now
在终端上输出当前日期,并将数据写入文件nowzhong。
13.2 输入
1)将输入重定向到文件,从而从文件中读取输入。
2)从用户读取输入。
3)将一个命令的输出重定向到另一个命令的输入。
13.2.1 输入重定向
command < file
13.2.2 读取用户输入
Shell脚本的常见任务之一就是提示用户输入,然后读取用户的响应。
格式:
read name
它读取用户输入的一整行,直到用户输入回车键为止,它使得该行成为由name所制定变量的值。
例如:
YN=yes
printf "Do you want to play a gane [$YN]?"
read YN
case $YN in
[yY]) echo yes ;;
*) echo "maybe later." ;;
esac
13.2.3 管道
UNIX中处理文件的命令大多都能从STDIN中读取输入,这使得用户可以使用一个程序过滤另一个程序的输
出。
使用管道可以将一个命令的输出重定向到另一个命令的输入。管道使用可以将几个命令连在一起。
例如:$ who | grep sudo
将who命令的输出作为下一个命令的输入,再进行过滤输出到终端。
13.3 文件描述符
标准输入(STDIN)0
标准输出(STDOUT) 1
标准错误(STDERR) 2
command 1>file1 2>file2
给定command的STDOUT重定向到file1,STDERR(错误信息)重定向到file2
for FILE in $FILES
do
ln -s $FILE ./docs >> /tmp/ln.log 2> /dev/null
这里ln的STDOUT增加到文件/tmp/ln.log中,STDOUT重定向到文件的/dev/null中
注意:文件/dev/null是所有UNIX系统中都能使用的用于删除输出的一个reshuffle文件。