Mais conteúdo relacionado Semelhante a Bash入门基础篇 (20) Bash入门基础篇2. 怎样写 shell 脚本
• 使用任何编辑工具编写shell脚本 例如 vi
–#!/bin/bash #在第一行放置头格式说明
• 在写完 shell 脚本之后,设置脚本执行权限
–chmod +x your-script-name
–chmod 755 your-script-name
• 执行你的脚本做测试
–bash your-script-name
–sh your-script-name
–./your-script-name
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
3. shell 中的变量
• Linux(Shell)中有两种类型的变量:
–系统变量:由Linux系统本身维护,通常为大写的变量名
–用户定义变量(UDV): 由用户创建和维护,通常小写
• 查看系统变量可以通过Linux指令 set 罗列出来
• 在调用变量时,在名称前加以"$"(美元符号)
–echo $USERNAME
–echo $HOME
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
4. 彩色Shell输出
• echo -e 指令可以在控制台输出彩色的字符。
• 色彩分为 前景色 和 背景色,十位数的数字 3 或 4 表示
–前景色 30-37(以3x代表)
–背景色 40-47 ( 以4x代表)
• 个位数表示为色彩
3 0 ( 黑色 ) 、 3 1 ( 红色 ) 、 3 2 ( 绿 色 ) 、 3 3 ( 黄 色) 、 3 4
( 蓝色 ) 、 3 5 ( 洋红 ) 、 3 6 ( 青 色 ) 、 3 7 ( 白 色) 。
• 前景色和背景色个位数不要一致,否则看不见任何信息(可以
用在密码输入处)
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
5. 彩色Shell输出二
• 使用格式:
– 033[前景色 ; 背景色m #同时更改前/背景色
– 033[前景色m #只更改前景色
– 033[背景色m #只更改背景色
– 033[0m #还原所有的前/背景色,最后部分一定要还原色彩
• echo "You are login to 033[34;40m bluefox 033[0m system"
– 打印蓝色的 bluefox
• 下面的代码用在防止密码被窥探
echo "Please input a password 033[34;44m"
read PASSWD; echo "033[0m"
echo PASSWD | openssl md5
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
6. 如何定义用户自己的变量
• 要定义UDV可以使用下面的语法:
变量名=值 (注意:等号之间没有空格)
• 通过"="将右边的值赋给左边的变量
no=10 #正确
10=no #错误,值必须在右边
vech=Bus #定义一个'vech'变量其值为'Bus'
n= 30 #错误,等号右边存在空格
n =20 #错误,等号左边存在空格
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
8. 如何打印UDV
• 要打印或调用变量时,使用下面的语法
$变量名 #在定义变量或赋值的时候不要"$"
#定义变量
vech=Bus
#显示变量
echo $vech
• 不要使用 echo vech ,这样只会把vech当成一个字符串的值
打印出来,也就是在屏幕中输出 "vech"本身
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
9. echo 命令
• 使用 echo 命令可以显示文本或变量的值
• echo [选项] [字符,变量...]
• 选项
-n 不换行输出,默认echo一次换一行,用在持续的打印输出
-e 启用转义字符解析
a 响铃 b 退格 c 去除尾部的新行
n 新的一行 r 回车 t 水平制表符功能
斜杠
echo -e "An apple a day keeps away attdoctorn"
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
10. shell中数学计算
• 使用下面的语法执行数学运算,注意中间都存在空格,一次只能处理
两个数字
语法: expr 操作数1 数学计算 操作数2
expr 1 + 3 #加法计算得到4
expr 10 / 2 #除法计算得到5
expr 20 % 3 #求余数得到2
expr 10 * 3 #乘法特殊,由于"*"星号为通配符之一,
#必须对"*"使用转义符,等到"*"本身
echo `expr 6 + 3` #显示结果,注意"`"(斜点)的使用,代表
#先行执行Bash命令
• 如果使用 echo "expr 6 + 3"或者echo 'expr 6 +3'将显示"expr
6 +3"字符本身
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
11. 引号的使用
• 我们来区分一下引号
""(双引号) 对""做转义,对"$"的变量做解析
''(单引号) 其中的内容不做任何修改
``(斜点) 用来执行命令
• 请观察下面的命令区别
–echo "Today is date" #输出 Today is date
–echo "Today is `date`" #输出 Today is 及日期
–echo 'Today is `date`' #原样输出 Today is `date`
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
14. 通配符的使用
• "*"星号代表任何的字符出现0到多次
ls /lib/*.so # 任何以 .so为后缀
ls /lib/lib*.so.* # 以lib开头+.so.+任何其他后缀
• "?"问号代表一个而且只有一个任何字符
ls /lib/lib??.so.? # 此文件名长度为10
• "[ ]" 括号内提供的字符选择一个
ls /lib/lib[bcp]*.so # b,c,p选一,libb,libc,libp
• "[ - ]" 括号内一段字符,0-9数字,a-z小写,A-Z大写
ls /lib/lib[b-p]*.so # 从b到p选一
• "[^ ]" 括号内的都排除掉 ,[^bc] 除了b和c以外的其他全部
ls /lib/lib[^c]*.so.*
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
17. 命令行参数
• 根据前面观察的结果
–$# 保存着命令后面所带的参数的
总数
–$* 或者 $@ 将命令后的所有参数
作为一个字符串保存
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
19. shell 脚本中条件判断
• 返回 Shell 中 0 (代表 True)或 1 (False) 结果
–if/then结构
–test 或者 [ ... ] 执行shell测试,返回shell结果
• Bash 2.02版本以上 [[ ... ]]
• 返回常规编程语言格式的结果
–(( ... )) 和 let ... 还可以做数字的比较
• bc 指令提供我们对条件的测试
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
20. bc指令的测试
• bc指令可以用在对数学和逻辑测试
5/2 # 5 除以 2 等于
2 # Shell中返回整数
5%2 # 5 除以 2 余多少?
1
0 || 1 # 逻辑或运算
1
100 > 99 # 100 大于 99 吗?
1 # YES
99 > 100 # 99 大于 100 吗?
0 # NO
quit #退出
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
21. test命令或[ ]
• [ ]中写入测试条件,注意条件和开/闭中括号之间要保留空格
• 初学者使用此模式时,要特别注意,0代表TRUE,可以理解成
没有错误,而1代表 FALSE
if [ 0 ]; then
echo " 0 is true"
else
echo "0 is false"
fi
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
22. 测试条件
• 字符的比较 数字的比较 代表意思
== -eq 相等
> -gt 大于
< -lt 小于
!= -ne 不等于
<=/>= -le/ge 小于等于/大于等于
Ÿ 多个条件测试时
-a 并且,逻辑与 -o 或者,逻辑或
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
23. 测试文件/文件夹属性
• 常见判断
-a #文件是否存在
-b #文件是否为块设备
-d #文件是否为目录
-s #文件大小是否为0
-r #文件是否具有可读权限
-w #文件是否具有可写权限
-x #文件是否具有可执行权限
• man bash 可以得到更为详尽的帮助
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
24. if...else...fi
• 语法:
if [ 条件判断 ]
then
命令 1 #上面条件判断结果为0,代表TRUE
命令 2
else
命令3 #上面条件判断结果为1,代表FALSE
命令4
fi
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
25. && 和 ||
• && 与运算, || 或运算,不能使用在 [ ... ] 之间,只能使用在
[[ ... ]]之间
[ -e "/etc/passwd" && -e "/etc/group" ]
–-bash: [: missing `]' #提示缺少[ ]
• 单独使用时, && 代表之前的条件 TRUE 时,|| 代表之前的
条件 FALSE。
[ ping -c2 $SERVER &> /dev/null ] &&
echo "$SERVER is online" ||
echo "$SERVER is down"
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
26. [[ ... ]] 测试
• [[ ... ]] 测试相比 [ ... ]更为实用些,这是一个扩展测试命令
• 使用 [[ ... ]] 相对 [ ... ] 而言,可以防止在脚本中出现很多逻辑
上的错误信息,比如 &&,|| , < 和 >
• 在 [[ ... ]] 中自动计算十进制和8/16进制的值。
decimal=15
octal=017 #八进制的数字15
hex=0x0f #16进制的数字15
if [ "$decimal" -eq $octal ] ;then
echo "$decimal equal $octal"
else
echo "$decimal not equal $octal"
fi
将上面的 [ ] 改为 [[ ]]再试试
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
27. if语句的直接使用示例
• if 语句可以直接使用Shell指令,再根据 $? 结果判断
DIR=/var/test
if cd $DIR &> /dev/null; then #直接丢弃错误信息
echo "now in $DIR"
else
echo "Can't change to $DIR"
fi
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
28. if语句嵌套
• 一步一步测试时,可能需要 if-then-else语句的嵌套使用
OSCH=0
echo "1. Unix (IBM AIX)"
echo "2. Linux (Red Hat Enterprise Linux)"
read OSCH
if [ $OSCH -eq 1 ]; then
echo "You pick UNIX OS"
else
if [ $OSCH -eq 2 ]; then
echo "You pick Linux OS"
else
echo "What you don't Like Linux/Unix OS"
fi
fi
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
30. exit 退出代码
• SHELL下执行指令凡是不成功都返回一个不为零的值
• exit函数可以实现脚本退出时返回值
if [ -e /var/spool/test.pid ]; then
echo "The program already run"
exit 1
fi
• echo $?
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
31. Shell中loop循环
• 循环的定义:
–计算机可以重复一而再,再而三的执行特定的指令,直到给
定的条件满足为止,重复执行的这一组指令就叫做loop
• Bash中支持
–for loop
–while loop
• 注意每个循环使用时
∴首先,用在循环中的变量必须要在循环前初始化
∴对每次循环都需要对条件做测试
∴在循环体中执行一次需要对循环测试条件值修改
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
32. for loop
• 语法:
for 变量名 in 列表
do
循环体
done
• 列表就是一个集合,集合由空格间隔,可以是以下的几种:
– 数字/字符集合
• 12579
• {1..254}
– 文件集合
• /etc/*.conf
– 指令结果集合
• $( find /etc/ -perm -003 )
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
33. for loop实例二
• 数字集合
echo "#!/bin/bash" > /bin/setFilewall.sh
for IP in {1..254}
do
echo "iptables -I INPUT -s 192.168.0.$IP -p tcp -m
state --state NEW -j ACCEPT" >>
/bin/setFirewall.sh
done
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
34. for loop 实例二
for FILE in $(find /var/ -size +10M)
do
rm -f $FILE
logger "$FILE has been deleted"
echo -e "033[33m$FILE 033[0mhas been
deleted" >> /var/tmp/largefile.log
done
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
35. for 循环C语言格式
l 很多有过C编程基础的程序员在开始写SHELL程序的时候对
Bash程序有着很大的抱怨;
l 但是Bash 2.02以后添加了(( ... )),可以提供类似C语言的语法
l 在(( ... )) 中你不再需要对SHELL变量名的调用在其之前加$
(美元号)
① for (( i = 0; i <=5 ; i++ ))
do
echo "welcome $i times"
done
l 特别要注意的是此类的语法的逻辑和SHELL截然相反,0代表
FALSE,所有非0的值代表TRUE,不建议用在if-then语句中
if (( UID > 0 )); then ; echo "Welcome root"; fi
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
36. for loop循环嵌套一
for NUM1 in {1..9}
do
for NUM2 in {1..9}
do
RES = $(( NUM1 * NUM2 )) #注意此处没有调用$
echo " $NUM1 * $NUM2 = $RES"
done
done
#请把此代码改成C语言格式
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
37. for loop循环嵌套二
• 国际象棋棋盘的例子
for (( i = 1; i <= 9 ; i++ ))
do
for (( j = 1; j <= 9 ; j++))
do
tot=$(( i+j ))
tmp=$(( tot % 2 ))
if [ $tmp -eq 0 ];then
echo -e -n "033[47m " #白色块
else
echo -e -n "033[40m " #黑色块
fi
done
echo -e -n "033[40m"
echo #换行
done
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
38. while循环
• 语法:
– while [ 条件测试 ]
do
命令
done
• 注意要修改测试条件的值,防止死循环。还可以与
if-then-fi嵌套使用,使用exit函数退出
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
39. while菜单示例
CHOOSE=0
while [[ $CHOOSE != "Q" && $CHOOSE != "q" ]]
do
if (( CHOOSE !="0" )); then
echo -e "Please input 033[33mq033[0m to quit"
sleep 4
fi
clear
echo "1. Linux"
echo "2. Unix"
echo "Q. Quit"
read CHOOSE
echo "Please Input 033[33mq033[0m to quit"
done
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
41. case语句示例
PIDFILE=/var/spool/test.pid
case $1 in
"start")
if [ -e $PIDFILE ]; then
echo "the testcase has already run"
else
echo $$ > $PIDFILE; echo "starting now..."
fi ;;
"stop")
kill -9 $(cat $PIDFILE) ; rm -f $PIDFILE ;;
"status")
....
*) #默认值,匹配所有上面没有给定的值
echo "Usage: /etc/init.d/testcase (start|stop|status)" ;;
esac
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
42. 如何调试脚本
• 当需要调试脚本错误时,你可以在 sh 或 bash 命令中使用 -v
和 -x 选项
• 语法
–bash 选项 {shell脚本}
–-v 打印shell脚本执行的行号
–-x 对每一个指令做展开计算
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
43. 向 /dev/null 发送程序不想要的输出
• Shell脚本程序需要过滤掉任何不想看到的因为执行Shell命令
输出的信息
• 语法
–命令 > /dev/null
• rm &> /dev/null
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
45. 函数的参数
• 函数也可以作为一个程序一样运行,接收参数
–fname $arg1 $arg2
• 这和Shell中位置参数一样,我们可以对$1,$2进行测试
max ( )
{
if (( $1 > $2 ));then
return $1 #注意,此时函数已经结束了
fi
return $2
}
max 10 100
echo $? #通过 $? 取得函数的返回值
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
46. 函数示例
setPath ( )
{
PATH=/bin:/usr/bin
if (( $UID == 0 ));then #如果为root
PATH=$PATH:/usr/bin/sbin:/sbin #路径追加sbin的目录
fi
if (( $2 == "after" ));then #根据位置参数2,决定如何添加新路径
PATH=$PATH:$1 #在原PATH后面追加
else
PATH=$1:$PATH #在原PATH之前添加
fi
}
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
47. I/O重定向和文件描述
• Linux经常使用到的 1> ,2> , &> 重定向,各自代表着标
准输出,标准错误,以及两者都包括(1&&2)
• Linux同时除以上的几个重定向外提供给我们 0-10 的其他文
件描述(File Description:FD)
• 它可以用来对前者的信息做一备份,之后再重新调用其信息
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
48. 重定向高级应用
• >&n 使用系统调用 dup (2) 复制文件描述符 n 并把结果用作标准输出;
<&n 标准输入复制自文件描述符 n;
<&- 关闭标准输入(键盘);
>&- 关闭标准输出;
n<&- 表示将 n 号输入关闭;
n>&- 表示将 n 号输出关闭;
• 上述所有形式都可以前导一个数字,此时建立的文件描述符由这个数字指定
而不是缺省的 0 或 1。如:
... 2>file 运行一个命令并把错误输出(文件描述符 2)定向到 file。
... 2>&1 运行一个命令并把它的标准输出和输出合并。(通过复制文件描述
符 1 来建立文件描述符 2 ,合并了两个流。)
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
49. 重定向高级应用续
• 2>&1 也就是 FD2=FD1 ,把 FD2 的 “数据输出通道” 改为 FD1
的 “数据输出通道”。因为 FD2 的默认输出和 FD1的默认输出本来
都是 monitor,一样的!
• exec 1>outfilename # 打开文件outfilename作为stdout。
exec 2>errfilename # 打开文件 errfilename作为 stderr。
exec 0<&- # 关闭 FD0。
exec 1>&- # 关闭 FD1。
exec 5>&- # 关闭 FD5。
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
50. 重定向高级应用续
• exec 3>&1;exec 4>&1 #建立FD3; 把FD3
看作最初始的FD1的硬盘备份
ss=$(((ls you no 2>&1 1>&3 3>&-;echo $?
>&4)|egrep >file) 4>&1)
*
exec 3>&-;exec 4>&- #关闭 FD3、FD4。
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
51. 用户界面和dialog工具 ①
• 在文本控制台下实现用户界面,支持 多选框 表单 文件选择 进
度条 输入框 菜单 消息框 密码 单选框 文本框 YesNo 等多个
元件
• 安装包 dialog
• /usr/share/doc/dialog-<version>/sample 目录下提供示
例程序
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
54. dialog工具实现消息框
• cat > dia2
dialog --title "Linux Dialog Utility Msgbox" #标题头
--backtitle "Linux Shell Script #一行写不完
Tutorial" #背景左上角信息
--msgbox "This is dialog box called msgbox,
which is used........." 9 50
• --msgbox 消息框中的内容
• 9 50 居中的长高度和款
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
55. 消息框演示结果截图
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
56. diglog工具实现确认框
• dialog --title "Linux Dialog Utility Msgbox" --backtitle "Linux Shell
• Script Tutorial" --msgbox "This is dialog box called msgbox, which
is used to show some information on screen which has also Ok
button, Thanks to Savio Lam and Stuart Herbert to give us this
utility. Press any key. . . " 9 50
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
57. 确认框演示结果截图
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
58. diglog工具实现yes/no选择对话框
dialog --title "Alert : Delete File" --backtitle "Linux Shell Script
Tutorial" --yesno "nDo you want to delete
'/usr/letters/jobapplication' file" 7 60
sel=$?
case $sel in
0) echo "User select to delete file";;
1) echo "User select not to delete file";;
255) echo "Canceled by user by pressing [ESC] key";;
esac
Ÿ 返回值判断用户的选择 0 代表 Yes ,1 代表 0 , 255 代表强制退出
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
59. yes/no演示结果截图
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
60. diglog工具实现输入框
dialog --title "Inputbox - To take input from you" --backtitle "Linux
Shell Script Tutorial" --inputbox "Enter your name please"
8 60 2>/tmp/input.$$ #关键部分将输入信息保存到文件中
sel=$?
na=$(cat /tmp/input.$$)
case $sel in
0) echo "Hello $na" ;; #执行结果为0,读取文件中输入的信息
1) echo "Cancel is Press" ;; #返回结果为1,表示取消
255) echo "[ESCAPE] key pressed" ;; #255为退出
esac
rm -f /tmp/input.$$
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
62. dialog中多选框
• --checklist 与Menu Box雷同,提供了多选框,同时也提供了选项的
on/off 的初始状态。
• 语法
– --checklist <文本> <高> <宽> <列表的高度> [ <tag> <条目描述>
<状态> ] ......
• 示例:
dialog --backtitle "服务列表" --title "这是一个多选框的例子"
--checklist "请选择开启的服务" 20 61 5
"ntp" "Network time protocol" off
"sendmail" "Sendmail mail service" oN
"httpd" "Apache Web server" oFf 2>/tmp/tmp.$$
Ÿ dialog的多选框返回值就是选择ON的值
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
64. dialog进度条
• dialog中可以使用loop实现动态的进度条
• 语法
– dialog --gauge <文本> <高> <宽> [百分比]
• 从标准输入中读取百分比的值 ( XXX ),如果没有指定缺省为0
PCT=10
(
while (( PCT != 100 ))
do
echo "XXX" #XXX占位符代表数字+%(百分号)
echo $PCT
echo "The newn message ($PCT percent)"
echo "XXX"
PCT=$((PCT+10))
sleep 1
done
) | dialog --title "Gauge" --gauge "Hi, this is a gauge" 20 70 0
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
65. dialog中菜单
• 在dialog中可以实现上下选择菜单的项
• 其结果输出到一个临时文件,再将 tag 结果显示出来
• 语法
– dialog --menu <文本> <高> <宽> <菜单高> [ tag 选项描述 ] ......
– 示例:
dialog --clear --title "Menu Box" --menu "Hi, this is a menu box example
n Choose the OS you like:" 20 51 4
"Linux" "RedHat Enterprise Linux"
"UNIX" "IBM AIX"
"WIN NT" "Microsoft Windows NT" 2> /tmp/temp.$$
cat /tmp/temp.$$
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
66. getopts命令
• getopts用来检测命令行中传递给脚本的有效参数
• 通常用在while loop中
• 语法:
– getopts <选项字符串> <变量1>
• <选项字符串>包含了要识别的选项字符;如果字符前存在“-”(横杠),
而此选项期待着有一个参数,它们之间用空格空开。
• 每次调用 getopts 的时候,它将下一选项设置给<变量1>
• 当选项需要参数时,getopts 将参数设置给变量 OPTARG
• 如果选项不正确,返回 ? 给<变量1>
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
67. getopts示例
::
while getopts n a opt #此程序就有-n 和
-a 选项,注意选项字串尾部的冒号(:)
do
case "$opt" in
n) name="$OPTARG";;
a) age="$OPTARG";;
?) echo "Usage: ..."
esac
done
echo "Welcome $name , you age is $age"
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
68. •
谢谢!
任何问题请 email:
yangwawa0323@163.com
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710