shell基础

一. 参考网址

  1. getopt简介

  2. shell中使用getopts、getopt处理命令行参数

  3. linux下eval和set的用法(老男孩学习总结)

  4.  Shell脚本中$0、$?、$!、$$、$*、$#、$@等的意义

  5. linux sed命令详解

  6. shell - sed匹配某一行开头,替换整行内容

  7. shell中#*,##*,#*,##*,% *,%% *的含义及用法

  8. shell编程中条件测试的=和==的区别

  9. shell 中的条件判断 “并且” “或者”

  10. 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 #错误,不会执行;或者执行提示程序错误

 

posted @ 2022-04-14 16:29  shanyu20  阅读(34)  评论(0编辑  收藏  举报