当前位置:   article > 正文

shell(二)echo、printf、test命令及shell的流程控制_echo输出 test命令结果

echo输出 test命令结果

一、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 test

5、显示不换行

#!/bin/sh
echo -e "OK! \c" # -e 开启转义 \c 不换行
echo "It is a test"

输出结果:

OK! It is a test

6、将显示结果输入到某文件中

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 的强大功能:

实例

  1. #!/bin/bash
  2. # author:菜鸟教程
  3. # url:www.runoob.com
  4.  
  5. printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg  
  6. printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
  7. printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543
  8. 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位小数。

 

实例

  1. #!/bin/bash
  2. # author:菜鸟教程
  3. # url:www.runoob.com
  4.  
  5. # format-string为双引号
  6. printf "%d %s\n" 1 "abc"
  7. # 单引号与双引号效果一样
  8. printf '%d %s\n' 1 "abc"
  9. # 没有引号也可以输出
  10. printf %s abcdef
  11. # 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用
  12. printf %s abc def
  13. printf "%s\n" abc def
  14. printf "%s %s %s\n" a b c d e f g h i j
  15. # 如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替
  16. printf "%s and %d \n"

执行脚本,输出结果如下所示:

  1. 1 abc
  2. 1 abc
  3. abcdefabcdefabc
  4. def
  5. a b c
  6. d e f
  7. g h i
  8. j
  9. and 0

printf 的转义序列

序列说明
\a警告字符,通常为ASCII的BEL字符
\b后退
\c抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略
\f换页(formfeed)
\n换行
\r回车(Carriage return)
\t水平制表符
\v垂直制表符
\\一个字面上的反斜杠字符
\ddd表示1到3位数八进制值的字符。仅在格式字符串中有效
\0ddd表示1到3位的八进制值字符

实例

  1. printf "a string, no processing:<%s>\n" "A\nB"
  2. a string, no processing:<A\nB>
  3. printf "a string, no processing:<%b>\n" "A\nB"
  4. a string, no processing:<A
  5. B>
  6. printf "www.runoob.com \a"
  7. www.runoob.com $                  #不换行

三、test命令

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

1、数值测试

参数说明
-eq等于则为真
-ne不等于则为真
-gt大于则为真
-ge大于等于则为真
-lt小于则为真
-le小于等于则为真

实例:

  1. num1=100
  2. num2=100
  3. if test $[num1] -eq $[num2]
  4. then
  5. echo '两个数相等!'
  6. else
  7. echo '两个数不相等!'
  8. fi

输出结果:

两个数相等!

代码中的 [] 执行基本的算数运算,如:

  1. #!/bin/bash
  2. a=5
  3. b=6
  4. result=$[a+b] # 注意等号两边不能有空格
  5. echo "result 为: $result"

结果为:

result 为: 11

2、字符串测试

参数说明
=等于则为真
!=不相等则为真
-z 字符串字符串的长度为零则为真
-n 字符串字符串的长度不为零则为真

实例:

  1. num1="ru1noob"
  2. num2="runoob"
  3. if test $num1 = $num2
  4. then
  5.     echo '两个字符串相等!'
  6. else
  7.     echo '两个字符串不相等!'
  8. fi

输出结果:

两个字符串不相等!

3、文件测试

参数说明
-e 文件名如果文件存在则为真
-r 文件名如果文件存在且可读则为真
-w 文件名如果文件存在且可写则为真
-x 文件名如果文件存在且可执行则为真
-s 文件名如果文件存在且至少有一个字符则为真
-d 文件名如果文件存在且为目录则为真
-f 文件名如果文件存在且为普通文件则为真
-c 文件名如果文件存在且为字符型特殊文件则为真
-b 文件名如果文件存在且为块特殊文件则为真

实例

  1. cd /bin
  2. if test -e ./bash
  3. then
  4.     echo '文件已存在!'
  5. else
  6.     echo '文件不存在!'
  7. fi

输出结果:

文件已存在!

另外,Shell 还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为: ! 最高, -a 次之, -o 最低。例如:

实例

  1. cd /bin
  2. if test -e ./notFile -o -e ./bash
  3. then
  4.     echo '至少有一个文件存在!'
  5. else
  6.     echo '两个文件都不存在'
  7. 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

  1. if condition
  2. then
  3. command1
  4. command2
  5. ...
  6. commandN
  7. else
  8. command
  9. fi

3、使用if  else-if else的格式是:  if  then  elif  then  else  fi

  1. if condition1
  2. then
  3. command1
  4. elif condition2
  5. then
  6. command2
  7. else
  8. commandN
  9. fi

实例:

  1. a=10
  2. b=20
  3. if [ $a == $b ]
  4. then
  5. echo "a 等于 b"
  6. elif [ $a -gt $b ]
  7. then
  8. echo "a 大于 b"
  9. elif [ $a -lt $b ]
  10. then
  11. echo "a 小于 b"
  12. else
  13. echo "没有符合的条件"
  14. fi

结果:a 小于 b

if 语句常搭配test一起使用(当然也经常可以不用test直接使用),例如:

  1. num1=$[2*3]
  2. num2=$[1+5]
  3. if test $[num1] -eq $[num2]
  4. then
  5. echo '两个数字相等!'
  6. else
  7. echo '两个数字不相等!'
  8. fi

结果:两个数字相等!

(即elseif变成了elif,而每个if或者elif要执行的代码都写在then中(else的代码不用搭配then),最后要用fi结尾)

 


二、for循环

格式如下:

  1. for var in item1 item2 ... itemN
  2. do
  3. command1
  4. command2
  5. ...
  6. commandN
  7. done

in后面接的是要循环的列表(列表元素用空格隔开),每次取到某个列表的值后赋给var。

done是终止符。

例如:

  1. for loop in 1 2 3 4 5
  2. do
  3. echo "The value is: $loop"
  4. done

输出结果:

  1. The value is: 1
  2. The value is: 2
  3. The value is: 3
  4. The value is: 4
  5. The value is: 5

三、while循环

语法格式:

  1. while condition
  2. do
  3. command
  4. done

实例:以下是一个基本的 while 循环,测试条件是:如果 int 小于等于 5,那么条件返回真。int 从 1 开始,每次循环处理时,int 加 1。运行上述脚本,返回数字 1 到 5,然后终止。

(其中let命令,用于执行一个或者多个表达式,在let命令后,变量计算可以不用加上$来表示变量)

  1. #!/bin/bash
  2. int=1
  3. while(( $int<=5 ))
  4. do
  5. echo $int
  6. let "int++"
  7. done

结果:

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5

我们此时可以利用while来读取键盘信息,下面的例子中,输入信息被设置为变量FILM,按<Ctrl-D>结束循环。

  1. echo '按下 <CTRL-D> 退出'
  2. echo -n '输入你最喜欢的网站名: '
  3. while read FILM
  4. do
  5. echo "是的!$FILM 是一个好网站"
  6. done

结果:

按下 <CTRL-D> 退出
输入你最喜欢的网站名:菜鸟教程
是的!菜鸟教程 是一个好网站

无限循环:

  1. while :
  2. do
  3. command
  4. done
  5. 或者
  6. while true
  7. do
  8. command
  9. done
  10. 或者
  11. for (( ; ; ))

四、until循环

until 循环执行一系列命令直至条件为 true 时停止。

until 循环与 while 循环在处理方式上刚好相反。

一般 while 循环优于 until 循环,但在某些时候—也只是极少数情况下,until 循环更加有用。

until 语法格式:

  1. until condition
  2. do
  3. command
  4. done

condition 一般为条件表达式,如果返回值为 false,则继续执行循环体内的语句,否则跳出循环。

以下实例我们使用 until 命令来输出 0 ~ 9 的数字:

实例

  1. #!/bin/bash
  2. a=0
  3. until [ ! $a -lt 10 ]
  4. do
  5.    echo $a
  6.    a=`expr $a + 1`
  7. done

运行结果:

输出结果为:

  1. 0
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 6
  8. 7
  9. 8
  10. 9

五、case ... esac

即多选择语句,与java中的switch ... case 类似,每个case分钟以右圆括号开始,以两个分号;;表示break。esac是case多选择语句的结束标记。

语法格式:

  1. case 值 in
  2. 模式1)
  3. command1
  4. command2
  5. ...
  6. commandN
  7. ;;
  8. 模式2
  9. command1
  10. command2
  11. ...
  12. commandN
  13. ;;
  14. esac

如上所示,取值后面必须有in,其中各个匹配值匹配成功以右括号开始,执行命令直到;;

匹配一个模式后,将不会执行其它模式,如果无匹配到任一模式,则执行*号的模式。例如:

  1. echo '输入 1 到 4 之间的数字:'
  2. echo '你输入的数字为:'
  3. read aNum
  4. case $aNum in
  5. 1) echo '你选择了 1'
  6. ;;
  7. 2) echo '你选择了 2'
  8. ;;
  9. 3) echo '你选择了 3'
  10. ;;
  11. 4) echo '你选择了 4'
  12. ;;
  13. *) echo '你没有输入 1 到 4 之间的数字'
  14. ;;
  15. esac

输入不同的内容,会有不同的结果,例如:

  1. 输入 14 之间的数字:
  2. 你输入的数字为:
  3. 3
  4. 你选择了 3

又如:

  1. #!/bin/sh
  2. site="runoob"
  3. case "$site" in
  4. "runoob") echo "菜鸟教程"
  5. ;;
  6. "google") echo "Google 搜索"
  7. ;;
  8. "taobao") echo "淘宝网"
  9. ;;
  10. esac

结果:

菜鸟教程

六、跳出循环

1、break

例如:
 

  1. #!/bin/bash
  2. while :
  3. do
  4. echo -n "输入 1 到 5 之间的数字:"
  5. read aNum
  6. case $aNum in
  7. 1|2|3|4|5) echo "你输入的数字为 $aNum!"
  8. ;;
  9. *) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"
  10. break
  11. ;;
  12. esac
  13. done

结果:

  1. 输入 15 之间的数字:3
  2. 你输入的数字为 3!
  3. 输入 15 之间的数字:7
  4. 你输入的数字不是 15 之间的! 游戏结束

2、continue

例如:

  1. #!/bin/bash
  2. while :
  3. do
  4. echo -n "输入 1 到 5 之间的数字: "
  5. read aNum
  6. case $aNum in
  7. 1|2|3|4|5) echo "你输入的数字为 $aNum!"
  8. ;;
  9. *) echo "你输入的数字不是 1 到 5 之间的!"
  10. continue
  11. echo "游戏结束"
  12. ;;
  13. esac
  14. done

运行代码发现,当输入大于5的数字时,该例中的循环不会结束,语句 echo "游戏结束" 永远不会被执行。

aa

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/660523
推荐阅读
相关标签
  

闽ICP备14008679号