赞
踩
一、echo命令
echo指令是用于字符串的输出,命令格式:echo 字符串
1、显示普通字符串:echo "It is a test" 或者 echo It is a test 结果:It is a test
2、也可以显示转义字符:echo "\"It is a test\"" 结果将是"It is a test"
3、显示变量:
read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量
#!/bin/sh read name echo "$name It is a test"
以上代码保存为 test.sh,name 接收标准输入的变量,结果将是:
[root@www ~]# sh test.sh OK #标准输入 OK It is a test #输出
4、显示换行
echo -e "OK! \n" # -e 开启转义 echo "It is a test"输出结果:
OK! It is a test5、显示不换行
#!/bin/sh echo -e "OK! \c" # -e 开启转义 \c 不换行 echo "It is a test"输出结果:
OK! It is a test6、将显示结果输入到某文件中
echo "It is a test" > myfile
(>符号会覆盖文件旧内容,>>符号则表示追加到文件末尾)
7、原样输出字符串,不进行转义或取变量(用单引号)
echo '$name\"'输出结果:
$name\"8、显示执行结果
echo `date`
注意: 这里使用的是反引号 `, 而不是单引号 '。
结果将显示当前日期
Thu Jul 24 10:08:46 CST 2014
二、printf命令
printf 命令模仿 C 程序库(library)里的 printf() 程序。
printf 由 POSIX 标准所定义,因此使用 printf 的脚本比使用 echo 移植性好。
printf 使用引用文本或空格分隔的参数,外面可以在 printf 中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n。
printf 命令的语法:
printf format-string [arguments...]参数说明:
- format-string: 为格式控制字符串
- arguments: 为参数列表。
实例
$ echo "Hello, Shell"
Hello, Shell
$ printf "Hello, Shell\n"
Hello, Shell
$接下来,我来用一个脚本来体现 printf 的强大功能:
实例
#!/bin/bash # author:菜鸟教程 # url:www.runoob.com printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543 printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876执行脚本,输出结果如下所示:
姓名 性别 体重kg 郭靖 男 66.12 杨过 男 48.65 郭芙 女 47.99%s %c %d %f 都是格式替代符,%s 输出一个字符串,%d 整型输出,%c 输出一个字符,%f 输出实数,以小数形式输出。
%-10s 指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
%-4.2f 指格式化为小数,其中 .2 指保留2位小数。
实例
#!/bin/bash # author:菜鸟教程 # url:www.runoob.com # format-string为双引号 printf "%d %s\n" 1 "abc" # 单引号与双引号效果一样 printf '%d %s\n' 1 "abc" # 没有引号也可以输出 printf %s abcdef # 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用 printf %s abc def printf "%s\n" abc def printf "%s %s %s\n" a b c d e f g h i j # 如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替 printf "%s and %d \n"执行脚本,输出结果如下所示:
1 abc 1 abc abcdefabcdefabc def a b c d e f g h i j and 0
printf 的转义序列
序列 说明 \a 警告字符,通常为ASCII的BEL字符 \b 后退 \c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略 \f 换页(formfeed) \n 换行 \r 回车(Carriage return) \t 水平制表符 \v 垂直制表符 \\ 一个字面上的反斜杠字符 \ddd 表示1到3位数八进制值的字符。仅在格式字符串中有效 \0ddd 表示1到3位的八进制值字符 实例
$ printf "a string, no processing:<%s>\n" "A\nB" a string, no processing:<A\nB> $ printf "a string, no processing:<%b>\n" "A\nB" a string, no processing:<A B> $ printf "www.runoob.com \a" www.runoob.com $ #不换行
三、test命令
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
1、数值测试
参数 说明 -eq 等于则为真 -ne 不等于则为真 -gt 大于则为真 -ge 大于等于则为真 -lt 小于则为真 -le 小于等于则为真 实例:
num1=100 num2=100 if test $[num1] -eq $[num2] then echo '两个数相等!' else echo '两个数不相等!' fi输出结果:
两个数相等!代码中的 [] 执行基本的算数运算,如:
#!/bin/bash a=5 b=6 result=$[a+b] # 注意等号两边不能有空格 echo "result 为: $result"结果为:
result 为: 112、字符串测试
参数 说明 = 等于则为真 != 不相等则为真 -z 字符串 字符串的长度为零则为真 -n 字符串 字符串的长度不为零则为真 实例:
num1="ru1noob" num2="runoob" if test $num1 = $num2 then echo '两个字符串相等!' else echo '两个字符串不相等!' fi输出结果:
两个字符串不相等!3、文件测试
参数 说明 -e 文件名 如果文件存在则为真 -r 文件名 如果文件存在且可读则为真 -w 文件名 如果文件存在且可写则为真 -x 文件名 如果文件存在且可执行则为真 -s 文件名 如果文件存在且至少有一个字符则为真 -d 文件名 如果文件存在且为目录则为真 -f 文件名 如果文件存在且为普通文件则为真 -c 文件名 如果文件存在且为字符型特殊文件则为真 -b 文件名 如果文件存在且为块特殊文件则为真 实例
cd /bin if test -e ./bash then echo '文件已存在!' else echo '文件不存在!' fi输出结果:
文件已存在!另外,Shell 还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为: ! 最高, -a 次之, -o 最低。例如:
实例
cd /bin if test -e ./notFile -o -e ./bash then echo '至少有一个文件存在!' else echo '两个文件都不存在' fi输出结果:
至少有一个文件存在!
四、shell的流程控制(重要常用)
一、if
1、在shell中if是的的格式为: if then fi
(fi,可以看出是这个流程控制的终止符)
例如:
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi表示:查询出ssh的进程,-gt 1表示存在符合的线程数大于1,此时如果成立则执行echo “true”
2、使用的if else格式为:if then else fi
if condition then command1 command2 ... commandN else command fi3、使用if else-if else的格式是: if then elif then else fi
if condition1 then command1 elif condition2 then command2 else commandN fi实例:
a=10 b=20 if [ $a == $b ] then echo "a 等于 b" elif [ $a -gt $b ] then echo "a 大于 b" elif [ $a -lt $b ] then echo "a 小于 b" else echo "没有符合的条件" fi结果:a 小于 b
if 语句常搭配test一起使用(当然也经常可以不用test直接使用),例如:
num1=$[2*3] num2=$[1+5] if test $[num1] -eq $[num2] then echo '两个数字相等!' else echo '两个数字不相等!' fi结果:两个数字相等!
(即elseif变成了elif,而每个if或者elif要执行的代码都写在then中(else的代码不用搭配then),最后要用fi结尾)
二、for循环
格式如下:
for var in item1 item2 ... itemN do command1 command2 ... commandN donein后面接的是要循环的列表(列表元素用空格隔开),每次取到某个列表的值后赋给var。
done是终止符。
例如:
for loop in 1 2 3 4 5 do echo "The value is: $loop" done输出结果:
The value is: 1 The value is: 2 The value is: 3 The value is: 4 The value is: 5
三、while循环
语法格式:
while condition do command done实例:以下是一个基本的 while 循环,测试条件是:如果 int 小于等于 5,那么条件返回真。int 从 1 开始,每次循环处理时,int 加 1。运行上述脚本,返回数字 1 到 5,然后终止。
(其中let命令,用于执行一个或者多个表达式,在let命令后,变量计算可以不用加上$来表示变量)
#!/bin/bash int=1 while(( $int<=5 )) do echo $int let "int++" done结果:
1 2 3 4 5我们此时可以利用while来读取键盘信息,下面的例子中,输入信息被设置为变量FILM,按<Ctrl-D>结束循环。
echo '按下 <CTRL-D> 退出' echo -n '输入你最喜欢的网站名: ' while read FILM do echo "是的!$FILM 是一个好网站" done结果:
按下 <CTRL-D> 退出 输入你最喜欢的网站名:菜鸟教程 是的!菜鸟教程 是一个好网站无限循环:
while : do command done 或者 while true do command done 或者 for (( ; ; ))
四、until循环
until 循环执行一系列命令直至条件为 true 时停止。
until 循环与 while 循环在处理方式上刚好相反。
一般 while 循环优于 until 循环,但在某些时候—也只是极少数情况下,until 循环更加有用。
until 语法格式:
until condition do command donecondition 一般为条件表达式,如果返回值为 false,则继续执行循环体内的语句,否则跳出循环。
以下实例我们使用 until 命令来输出 0 ~ 9 的数字:
实例
#!/bin/bash a=0 until [ ! $a -lt 10 ] do echo $a a=`expr $a + 1` done运行结果:
输出结果为:
0 1 2 3 4 5 6 7 8 9
五、case ... esac
即多选择语句,与java中的switch ... case 类似,每个case分钟以右圆括号开始,以两个分号;;表示break。esac是case多选择语句的结束标记。
语法格式:
case 值 in 模式1) command1 command2 ... commandN ;; 模式2) command1 command2 ... commandN ;; esac如上所示,取值后面必须有in,其中各个匹配值匹配成功以右括号开始,执行命令直到;;
匹配一个模式后,将不会执行其它模式,如果无匹配到任一模式,则执行*号的模式。例如:
echo '输入 1 到 4 之间的数字:' echo '你输入的数字为:' read aNum case $aNum in 1) echo '你选择了 1' ;; 2) echo '你选择了 2' ;; 3) echo '你选择了 3' ;; 4) echo '你选择了 4' ;; *) echo '你没有输入 1 到 4 之间的数字' ;; esac输入不同的内容,会有不同的结果,例如:
输入 1 到 4 之间的数字: 你输入的数字为: 3 你选择了 3又如:
#!/bin/sh site="runoob" case "$site" in "runoob") echo "菜鸟教程" ;; "google") echo "Google 搜索" ;; "taobao") echo "淘宝网" ;; esac结果:
菜鸟教程
六、跳出循环
1、break
例如:
#!/bin/bash while : do echo -n "输入 1 到 5 之间的数字:" read aNum case $aNum in 1|2|3|4|5) echo "你输入的数字为 $aNum!" ;; *) echo "你输入的数字不是 1 到 5 之间的! 游戏结束" break ;; esac done结果:
输入 1 到 5 之间的数字:3 你输入的数字为 3! 输入 1 到 5 之间的数字:7 你输入的数字不是 1 到 5 之间的! 游戏结束2、continue
例如:
#!/bin/bash while : do echo -n "输入 1 到 5 之间的数字: " read aNum case $aNum in 1|2|3|4|5) echo "你输入的数字为 $aNum!" ;; *) echo "你输入的数字不是 1 到 5 之间的!" continue echo "游戏结束" ;; esac done运行代码发现,当输入大于5的数字时,该例中的循环不会结束,语句 echo "游戏结束" 永远不会被执行。
aa
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。