shell基础
一. 参考网址
1. getopt简介
2. shell中使用getopts、getopt处理命令行参数
4. Shell脚本中$0、$?、$!、$$、$*、$#、$@等的意义
7. shell中#*,##*,#*,##*,% *,%% *的含义及用法
11. Shell 单行注释与多行注释
12. linux参数太长续行,linux shell 参数换行(标准说法:续行)
13. shell转义符
14. cat同EOF重定向内容到文件
15. linux中 export 作用 及 source 的用法
16. What's the difference between $@ and $* [duplicate]
17. shell中#*,##*,#*,##*,% *,%% *的含义及用法 替换字符
18. shell 编程:冒号 后面跟 等号,加号,减号,问号的意义
19. set命令(有设置位置参数介绍)
20. shell中的eval命令
21. Shell脚本中的set指令,比如set -x 和 set -e
22.linux shell脚本对未定义变量的判断以及if的用法
二. 实践
1. = 与 ==的使用
#!/bin/sh FORCE_BUNDLE=false if [ "${FORCE_BUNDLE}" = true ] //正确
if [ ! -f ${APP_BUNDLE_PATH}/rtu700.bundle ]; then
if [ "${FORCE_BUNDLE}" == true ] //错误,true需要加""才正确 if [ "${FORCE_BUNDLE}" == "true" ] //正确 注意: test中可用的比较运算符只有==和!= 两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq, -gt这种形式 [ string1 = string2 ]:如果string1和string2相同,则判断为真。 [ string1 == string2 ] 等同于[ string1 = string2 ]。 [ string1 != string2 ]:如果string1和string2不相同,则判断为真。
2. 判断文件不存在
if [ ! -f ${file_name} ]; then
3. 逻辑&& 与 || 的使用
if [ condition ] && [ condition ]; then #正确 command fi
if [ c1 -a c2 ]; then #正确
if [ condition1 && condition2 ]; then #错误
if [[ condition1 && condition2 ]]; then #正确,支持正则表达式
4. 使用否定操作符!
时,最好用圆括号确定转义的范围。
if [ ! \( $INT -ge $MIN_VAL -a $INT -le $MAX_VAL \) ]; then #圆括号前有转义符'\' echo "$INT is outside $MIN_VAL to $MAX_VAL." else echo "$INT is in range." fi
5. 正则匹配与正则不匹配
6. 判断一个数是否为整数
#!/bin/bash INT=-5 if [[ "$INT" =~ ^-?[0-9]+$ ]]; then echo "INT is an integer." exit 0 else echo "INT is not an integer." >&2 exit 1 fi
7. 续行符使用
需要使用 \ 符号,而不能使用 " 符号,如下:
1 #!/bin/sh 2 3 #功能:测试shell脚本的续行符 4 5 CONNECT="'chat -s -v ABORT BUSY ABORT \"NO CARRIER\" ABORT \"NO DIALTONE\" ABORT ERROR ABORT \"NO ANSWER\" TIMEOUT 30 \ 6 \"\" AT OK ATE0 OK ATI\;+CSUB\;+CSQ\;+CPIN?\;+COPS?\;+CGREG?\;\&D2 \ 7 OK AT+CGDCONT=1,\\\"IP\\\",\\\"$QL_APN\\\",,0,0 OK ATD*99# CONNECT'" 8 9 CONNECT2="'chat -s -v ABORT BUSY ABORT \"NO CARRIER\" ABORT \"NO DIALTONE\" ABORT ERROR ABORT \"NO ANSWER\" TIMEOUT 30" \ 10 "\"\" AT OK ATE0 OK ATI\;+CSUB\;+CSQ\;+CPIN?\;+COPS?\;+CGREG?\;\&D2" \ 11 "OK AT+CGDCONT=1,\\\"IP\\\",\\\"$QL_APN\\\",,0,0 OK ATD*99# CONNECT'" 12 13 CONNECT3="'chat -s -v ABORT BUSY ABORT \"NO CARRIER\" ABORT \"NO DIALTONE\" ABORT ERROR ABORT \"NO ANSWER\" TIMEOUT 30 " 14 "\"\" AT OK ATE0 OK ATI\;+CSUB\;+CSQ\;+CPIN?\;+COPS?\;+CGREG?\;\&D2 " 15 "OK AT+CGDCONT=1,\\\"IP\\\",\\\"$QL_APN\\\",,0,0 OK ATD*99# CONNECT'" 16 17 echo $CONNECT 18 echo "--------------------------" 19 echo "$CONNECT2" 20 echo "--------------------------" 21 echo "$CONNECT3"
运行结果如下:
9. 函数的使用
1)在/bin/sh下,函数名前不要加func,否则会提示错误:
2)函数名定义的的地方可以加(),但调用的地方可以省略(),如下:
#/bin/sh
test_func() { echo "$1: hello world!" } test_func bob #正确
test_func() bob #错误,不会执行;或者执行提示程序错误