• shell脚本


    目录

    一、什么是shell

    二、运行方法

    三、shell格式

    四、变量定义和引用

    五、shell中无引号、单引号和双引号的区别

    六、反引号

    七、if语句

    八、for循环

    九、while循环

    十、case语句

    十一、echo的创建和追加输入文件

    十二、shell程序的传参

    十三、while循环和case语言和传参结合


    一、什么是shell

    • shell脚本其实是一类语言而不是一个语言。
    • 常用shell语言:sh、bash、csh、ksh、perl、python等
    • 脚本语言一般在嵌入式中应用,主要是用来做配置
    • shell脚本的运行机制:解释运行
      shell解析器会逐行的解释shell程序代码,然后一行一行的去运行。(顺序结构)

    二、运行方法

    • ./xx.sh,chmod a+x xx.sh来添加可执行权限。
    • source xx.sh,source是linux的一个命令,这个命令就是用来执行脚本程序的。这样运行不需要脚本具有可执行权限。
    • bash xx.sh,bash是一个脚本程序解释器,本质上是一个可执行程序。这样执行相当于我们执行了bash程序,然后把xx.sh作为argv[1]传给他运行。

    三、shell格式

    • shell程序的第一行一般都是: #!/bin/sh    
      指定shell程序执行时被哪个解释器解释执行
    • 利用shell输出变量
      1.编写.sh文件
      2.加运行权限chmod +x xx.sh
      3.运行./xx.sh
    1. #!/bin/sh
    2. mkdir xiaowei
    3. cd xiaowei
    4. touch demo1.sh

    四、变量定义和引用

    • shell是弱类型语言(语言中的变量如果有明确的类型则属于强类型语言;变量没有明确类型就是弱类型语言)
    • shell中赋值的=两边是不能有空格的
    • 引用一个变量必须使用$符号,$符号就是变量解引用符号
    • 变量引用的时候可以$var,也可以${var}。这两种的区别是在某些情况下只能用${var}而不能简单的$var
    1. #!/bin/sh
    2. a=xiaowei
    3. echo a
    4. echo $a
    5. echo $ayou
    6. echo ${a}you
    7. xw@ubuntu:~/xiaowei$ ./demo1.sh
    8. a
    9. xiaowei
    10. xiaoweiyou

    五、shell中无引号、单引号和双引号的区别

    • shell中使用字符串可以不加双引号,直接使用。而且有空格时也可以,但是缺陷是不能输出"或者其他转义字符
    • shell中也可以使用单引号来表示字符串,也是直接使用的,不能输出转义字符。
    • 无引号:不能出现任何转义字符
      单引号:完全输出
      双引号:按照转义字符输出
    • \$表示$的字面值,输出$符号
      \`表示`的字面值
      \"表示"的字面值
      \\表示\的字面值
    1. #!/bin/sh
    2. echo new string
    3. echo 'new st\"ring'
    4. echo "new st\"ring"
    5. var="\$a\$"
    6. echo $var
    7. var="$a$"
    8. echo $var
    9. #如果不加转义字符,没办法输出$a$
    10. xw@ubuntu:~/xiaowei$ ./1_6.sh
    11. new string
    12. new st\"ring
    13. new st"ring
    14. $a$
    15. $

    六、反引号

    得到这个命令的返回值

    1. #!/bin/sh
    2. MYPATH="`pwd`/include"
    3. echo "MYPATH = $MYPATH"
    4. xw@ubuntu:~/xiaowei$ ./1_5.sh
    5. MYPATH = /home/xw/xiaowei/include

    七、if语句

    • 典型if格式
      if [表达式]; then
          xxx
      else
          xxx
      fi
    • 典型应用
      判断文件是否存在(-f),注意[]里面前后都有空格,不能省略
      判断目录是否存在(-d)
      判断字符串是否相等("str1" = "str2")
      判断数字是否相等(-eq)、大于(-gt)、小于(-lt)、大于等于(-ge)、小于等于(-le)
      (eq就是equal,gt就是greater than,lt就是less than,ge就是greater or equal,le就是less or equal)
      判断字符串是否为空(-z)
    • “-o”表示逻辑或
    • 逻辑与&&和逻辑或||与简写的if表达式相结合
    1. #!/bin/sh
    2. #数字判断
    3. if [ 21 -eq 21 ]; then
    4. echo "yes"
    5. else
    6. echo "no"
    7. fi
    8. #逻辑或
    9. if [ "st" = "str" -o 21 -gt 10 ]; then
    10. echo "yes"
    11. else
    12. echo "no"
    13. fi
    14. #|| &&,
    15. str="ss"
    16. [ -z $str ] || echo "fei kong" #str为非空,左边不成立,为0,判断右边,输出
    17. str=""
    18. [ -z $str ] && echo "kong" #str为空,左边成立,为1,判断右边,输出
    19. xw@ubuntu:~/xiaowei$ ./1_7.sh
    20. yes
    21. yes
    22. fei kong
    23. kong

    八、for循环

    1. #!/bin/sh
    2. #for i in 1 2 3 4 5 6
    3. for i in `ls`
    4. do
    5. echo $i
    6. done
    7. xw@ubuntu:~/xiaowei$ ./8.sh
    8. 1_5.sh
    9. 1_6.sh
    10. 1_7.sh
    11. 8.sh
    12. demo1.sh

    九、while循环

    1. #!/bin/sh
    2. i=2
    3. j=11
    4. while [ $i -lt $j ] #-lt小于
    5. do
    6. echo $i
    7. i=$(($i + 2)) #i++
    8. done
    9. xw@ubuntu:~/xiaowei$ ./9.sh
    10. 2
    11. 4
    12. 6
    13. 8
    14. 10

    十、case语句

    • shell中的case语句和C语言中的switch case语句作用一样
    • shell中的case语句,不需要break
    1. #!/bin/sh
    2. i=2
    3. case $i in
    4. 1) echo "1" ;;
    5. 2) echo "2" ;;
    6. esac
    7. xw@ubuntu:~/xiaowei$ ./10.sh
    8. 2

    十一、echo的创建和追加输入文件

    • shell中可以直接使用echo指令新建一个文件,并且将一些内容传入这个文件中>
    • 追加符号>> 向一个已经存在的文件末尾追加输入内容
    1. #!/bin/sh
    2. echo `ls` > a.txt #运行ls
    3. echo `./9.sh` >> a.txt #运行9.sh
    4. #a.txt文件内容
    5. 10.sh 11.sh 1_5.sh 1_6.sh 1_7.sh 8.sh 9.sh demo1.sh
    6. 2 4 6 8 10

    十二、shell程序的传参

    • C语言中可以通过main函数的argc和argv给程序传参
    • shell中
      $#表示调用该shell时传参的个数。($#计数时只考虑真正的参数个数)
      $0、$1、$2·····则依次表示传参的各个参数。
    1. echo $# $0 $1 $2 $3
    2. xw@ubuntu:~/xiaowei$ ./12.sh 1 2 3
    3. 3 ./12.sh 1 2 3

    十三、while循环和case语言和传参结合

    • shell中的$# $1等变量的值是可以被改变,被shift指令改变。shift指令有点像左移运算符,把我们给shell程序的传参左移了一个移出去了,原来的$2变成了新的$1,原来的$#少了1个。
    • break跳出while循环
    1. #!/bin/sh
    2. while [ $# -gt 0 ] ; do #大于
    3. case $# in
    4. 1) echo $# $1 ; shift ; break ;; #break跳出while
    5. 2) echo $# $1 $2 ; shift ;; #shift指令,左移
    6. 3) echo $# $1 $2 $3 ; shift ;;
    7. esac
    8. done
    9. echo $# $0 $1 $2 $3
    10. xw@ubuntu:~/xiaowei$ ./13.sh 7 8 9
    11. 3 7 8 9
    12. 2 8 9
    13. 1 9
    14. 0 ./13.sh
  • 相关阅读:
    NodeJs 性能提升方案
    SonarQube安装
    前端面试八股文(超详细)
    Nacos做配置中心使用
    《时间简史》回顾
    Oracle表格分类浅析1——普通堆表
    Java抽象类和接口
    VMware中LINUX系统配置NAT ssh远程访问
    WPS通过“文档部件”的“域”设置图、表和公式的自动序列号
    【Hadoop】9、Sqoop组件
  • 原文地址:https://blog.csdn.net/m0_51247005/article/details/126874262