使用环境变量,和转义美元 $ 符号,如果要打印美元 $ 需要进行转义,否则有可能打印为空或其他已定义的环境变量 代码 1-3
- : /data# cat demo2
- #!/bin / bash echo - n "The time and date are:"date who: /data# ./demo2 The time and date are: Thu Dec 1 20 : 06 : 19 CST 2016 root pts / 0 2016 - 12 - 01 19 : 59(122.90.139.156)
用户变量 除了环境变量,shell 脚本还允许在脚本中定义和使用自己的变量,定义变量允许临时存储数据并在整个脚本中使用 代码 1-4
- : /data# cat demo4
- #!/bin / bash echo "User info for userid:$USER"echo "UID:$UID"echo "HOME:$HOME"echo "The cost of item is $15"echo "The cost of item is \$15": /data# ./demo4 User info
- for userid: root UID: 0 HOME: /root
- The cost of item is 5
- The cost of item is $15
- /
反引号 shell 脚本中反引号允许将 shell 命令的输出赋给变量 代码 1-5
- : /data# cat demo5
- #!/bin / bash days = 19 guest = "Tom"echo "$guest checked in $days days ago"days = 25 guest = "Amy"echo "$guest checked in $days days ago"customer = $guest echo "The customer is $customer": /data# ./demo5 Tom checked in 19 days ago Amy checked in 25 days ago The customer is Amy
输出重定向 将命令的输出发送到一个文件中,bash shell 采用 (>) 完成输出重定向,采用 (>>) 完成追加输出重定向 代码 1-6
- : /data# cat demo6
- #!/bin / bash testing = `date`echo "$testing"today = `date + %Y - %m - %d`echo "now is $today"today = `date + %H: %M: %S`echo "now is $today"today = `date "+%Y-%m-%d %H:%M:%S"`echo "now is $today"tomorrow = `date - d tomorrow "+%Y-%m-%d %H:%M:%S"`echo "tomorrow is $tomorrow"yesterday = `date - d yesterday "+%Y-%m-%d %H:%M:%S"`echo "yesterday is $yesterday": /data# ./demo6 Thu Dec 1 20 : 45 : 05 CST 2016 now is 2016 - 12 - 01 now is 20 : 45 : 05 now is 2016 - 12 - 01 20 : 45 : 05 tomorrow is 2016 - 12 - 02 20 : 45 : 05 yesterday is 2016 - 11 - 30 20 : 45 : 05
输入重定向 将文件的内容重定向到命令,输入重定向的符号(<),内联输入重定向符号是双小于号(<<),除了这个符号,必须指定一个文件标记来划分输入数据的开始和结尾 wc 命令是用来打印文件的文本行数、单词数、字节数等默认输出三个值 代码 1-7
- : /data# date > demo7
- :/data#cat demo7 Thu Dec 1 20 : 52 : 09 CST 2016 : /data# who > demo7
- :/data#cat demo7 root pts / 0 2016 - 12 - 01 19 : 59(122.90.139.156) : /data# date >> demo7
- :/data#cat demo7 root pts / 0 2016 - 12 - 01 19 : 59(122.90.139.156) Thu Dec 1 20 : 52 : 32 CST 2016
管道 有时需要发送某个命令的输出作为另一个命令的输入 代码 1-8
- : /data# wc <<EOF
- > Java
- > PHP
- > Python
- > EOF
- 3 3 16
- /
expr 命令允许在命令上上处理数学表达式(注:数字和运算符必须有空格分隔),一些有特殊含义的符号(例如星号),可加上反斜杠转义 代码 1-9
- : /data# cat demo9
- hello Java
- hello Spring
- hello Mybatis
- PHP is the best language in the world
- Java is the best language in the world
- :/data#cat demo9 | grep Java hello Java Java is the best language in the world
将一个算术运算式的结果赋给一个变量,需要用引号括起来 代码 1-10
- : /data# expr 1 + 5
- 6
- :/data#expr 1 - 5 - 4 : /data# expr 1 * 5
- expr: syntax error
- :/data#expr 1\ * 5 5 : /data# expr 1 /5 0
使用方括号计算
- : /data# cat demo1
- #!/bin / bash val1 = 20 val2 = 10 val3 = `expr $val1 / $val2`echo "The result is $val3": /data# ./demo1 The result is 2
代码 1-11
- : /data# val1=$[1+5]
- :/data#echo $val1 6 : /data# val2=$[$val1+10]
- :/data#echo $val2 16 : /data# cat demo2
- #!/bin / bash val1 = 5 val2 = 8 val3 = 9 val4 = 1 val5 = 10 val6 = 2 val = $[val1 + (val2 - val3) + val4 * val5 + val6] echo "The result is $val": /data# ./demo2 The result is 16
bc 计算机允许在命令行输入浮点表达式、解释表达式、计算并返回结果,bc 计算器能识别:
代码 1-12
使用 bc -q 可以去掉提示语 代码 1-13
- : /data# bc
- bc 1.06.95
- Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
- This is free software with ABSOLUTELY NO WARRANTY.
- For details type `warranty'.
- 9.1+11.2
- 20.3
- 8.1+9.9
- 18.0
- quit
- /
脚本中使用 bc 代码 1-14
- : /data# bc -q
- 3/5 0 scale = 3 3 / 5.600 val1 = 10 val2 = 6 val1 * val2 60 val3 = val1 + val2 print val3 16 quit
查看退出状态码 Linux 提供 $? 变量来保存上个执行命令的退出状态码
- : /data# cat demo3
- #!/bin / bash val1 = `echo "scale=3;3/6" | bc`echo "The result is $val1": /data# ./demo3 The result is.500
代码 1-15
- : /data# date
- Fri Dec 2 04:57:24 CST 2016
- :/data#echo $ ? 0 : /data# aaa
- No command 'aaa' found, did you mean:
- Command 'aha' from package 'aha' (universe)
- Command 'aa' from package 'astronomical-almanac' (universe)
- Command 'ara' from package 'ara' (universe)
- Command 'jaaa' from package 'jaaa' (universe)
- aaa: command not found
- :/data#echo $ ? 127
状态码 | 描述 |
0 | 命令成功结束 |
1 | 通用未知错误 |
2 | 误用 shell 命令 |
126 | 命令不可执行 |
127 | 没找到命令 |
128 | 无效退出参数 |
128+x | Linux 信号 x 的严重错误 |
130 | 命令通过 Ctrl+C 终止 |
255 | 退出状态码越界 |
代码 1-16
- : /data# cat demo4
- #!/bin / bash date echo $ ? who exit 5 : /data# ./demo4 Fri Dec 2 05 : 03 : 08 CST 2016 0 root pts / 0 2016 - 12 - 02 04 : 39(122.91.222.126) : /data# echo $?
- 5
- /
来源: http://www.bubuko.com/infodetail-1857772.html