【Shell脚本】


一、shell的基本语法

1.脚本:它是一个可以直接被执行/运行的文件;

2.shell脚本:利用shell语言编写的一个可执行文件;

3.shell终端界面窗口:提供shell技术/语言进行编辑脚本的窗口命令行—>右键选择—>【打开终端】---->不仅能执行命令,还能在里面编写shell脚本;

4.shell脚本的编写和执行可以借助vi编辑器,编写脚本,也可以借助bash解析运行脚本:/bin/bash

例:shell环境 = vi编辑器 + bash解析器

5.编写第一个shell脚本;
1>语法:vi 脚本文件名.sh

​ 案例:新建一个脚本:file01.sh,输出"hello world!"

2>脚本文件第一行:

​ #!/bin/bash :通过#!来指定该脚本编写完成后,是由/bin/bash解析器进行解析执行操作;

3>shell脚本能够做的事情:

​ 将许多命令连在一起,用户只需要执行该脚本一次,就可以把脚本中所有的命令全部被执行,后期还可以继续利用该脚本;

4>脚本的运行/执行方式:

​ 方式一:

​ 首先给脚本文件赋予可执行权限:chmod +x 文件名.sh

​ 最后再执行:./脚本名字.sh

​ 方式二:直接交给bash解析器:/bin/bash 脚本名字.sh

​ 案例:创建一个脚本文件file02.sh,实现以下操作:

6.shell变量的使用

6.1>变量:指的是用来接受shell脚本在执行过程中会发生改变的数据;

6.2>声明(创建)变量

​ 格式:变量名 = 值

​ 例:

6.3>变量名的命名规则

​ 1)首个字母必须是字母(Aa—Zz);

​ 2)不能有空格,但是可以使用下划线’_'做连接,例:class_name=“testing2304”;

​ 3)不能出现标点符号;

​ 4)不能出现关键词(指的是在Linux系统中已经有特殊含义的词语,比如ls,cp,mv…);

6.4>调用变量:获取变量中储存的值

​ 格式一:$变量名

​ 格式二: 变量名注:大括号的作用是为了明确变量名,告诉 {变量名} 注:大括号的作用是为了明确变量名,告诉 变量名注:大括号的作用是为了明确变量名,告诉具体要调用的变量;

6.5>shell注释:

​ 只起到解释说明的作用,不参加基本的执行,类似于备注

​ 格式:#注释的内容

6.6>只读变量的设置:只允许读取变量中的值,不能进行修改;

​ 格式:readonly 变量名

6.7>删除变量

​ 格式:unset 变量名

​ 备注:只读变量无法删除;

7.shell字符串的操作;

7.1>字符串:一般是由引号包裹起来的任意个字符;

7.2>字符串的拼接:把仁义的字符串数据,拼凑在一起;

​ 格式:直接写在一起即可;

7.3>获取字符串的长度:统计字符串中字符的总个数;

​ 格式:${#变量名}

          #!/bin/bash
          
          #声明两个变量
          s01="test"
          s02="testing_2304"
          
          #分别输出s01和 s02的长度
          echo "s01的字符串长度是:${#s01}"  #4
          echo "s02的字符串长度是:${#s02}"  #12

7.4>字符串的截取操作;

​ 格式:${变量名:开始位置的下标:截取字符的长度};

​ 下标=位置-1 ;

​ 例:从第三个位置开始截取,下标:2 ;

          #!/bin/bash
          
          #声明一个变量
          s="this is testing2304'
          
          #请大家从第四个位置开始截取,长度6个字符
          echo"新的数据是:${s:3:6}"
          #请大家截取第七个位置到第十三个位置上的字符
          echo"结果是:${s:6:7}"

​ 备注:在字符串中,如果有空格,标点符号,数字都算一个字符;

8.shell数组的使用

8.1>数组:等同于数学上的集合用来存储多个相同类型的数据

8.2>声明(创建)数组

​ 格式:数组名=(值1 值2 值3 值4…)

​ 备注:数组是不限制大小(数据个数);

​ 数组使用()来声明

​ 8.3>关于数组的操作:

​ 1)获取数组中某个位置上的值:${数组[下标数]}

​ 2)获取数组中所有的值:${数组名[@]}

​ 8.4>获取数组的长度操作:

​ 1)获取数组中所有值(存储值)的总个数:${#数组名[@]}

           #!/bin/bash
           #声明两个数组
           s01=(87 90 256 892 34 12 65)
           s02=("test" "test2304" "testing" "testing2304")
           #分别统计s01和s02两个数组中值的总个数(长度)
           echo  ${#s01[@]}    #7
           echo  ${#s02[@]}    #4

​ 2)获取数组中某个位置上的值的长度(值中字符的总个数):${#数组名[下标]}

           #!/bin/bash
           #声明一个数组
           s02=("test" "test2304" "testing" "testing2304")
           #统计s02数组中第三个位置上的值的长度
           echo  ${#s02[2]}   #7

​ 8.5>数组第二种创建方式:下标;

​ 格式:数组名[下标]=值

       #!/bin/bash

       #创建一个数组  arr=(35 12 80 83 95)
       arr[0]=35
       arr[1]=12
       arr[2]=80
       arr[3]=83
       arr[4]=95

       #输出arr数组中的所有值
       echo  "arr数组中所有的值是:${arr[@]}"

       #输出arr数组的长度(值的总个数)
       echo "arr数组的长度是:${#arr[@]}"
9.shell其他的操作

​ 9.1>’ read ’ 把终端中用户输入的内容,读取到,传递到脚本中的变量;

​ 格式:read 变量名

       #!/bin/bash

       #声明一个变量 i=89  i=90
       read i
       read j

       #输出
       echo  "读取到的数据是:$i"
       echo  "读取到的数据是:$j"

​ 9.2>定向符’ > ’ 将操作的结果定向输入到指定的文件;

​ 例:Linux命令 > 文件名 将Linux命令执行的结果报存到指定的文件(覆盖);

          [root@bogon shello2]# touch 1.txt 2.txt
          [rootabogon shello2]# echo"hello,world"> 1.txt
          [root@bogon shello2]# ls al /etc > 2.txt
          [root@bogon shell02]# echo"testing2304”> 2.txt

​ 双重定向符’ >> ’ 将操作的结果定向输入到指定的文件;

​ 例:Linux命令 >> 文件名 将Linux命令执行的结果报存到指定的文件(追加);

           [root@bogon shello2]# echo"test2304">> 2.txt

​ 9.3>echo `` 将Linux命令的执行将结果,看成是普通的字符串进行输出(了解);

       [root@bogon ~]# cal
       十月 2023     
       日 一 二 三 四 五 六
       1  2  3  4  5  6  7
       8  9 10 11 12 13 14
       15 16 17 18 19 20 21
       22 23 24 25 26 27 28
       29 30 31

       [root@bogon ~]# echo `cal`
       十月 2023 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17        18 19 20 21 22 23 24 25 26 27 28 29 30 31

二、shell运算符的使用

1.运算符:用来进行计算,判断,比较等等相关操作;
2.算术运算符

​ ’ + ’ ’ - ’ ’ * ’ ’ / ’ 加减乘除

​ ’ / ’ 除法 取商(不会做除尽的行为) 7/2=3

​ ’ % ’ 除法 取余 7%2=1 6%2=0

备注:shell中如果想要进行计算的操作,需要借助于计算表达式 ( ( 计算公式 ) ) , ((计算公式)), ((计算公式))(3+2))—>5

#!/bin/bash
#声明两个变量
X=7
y=2
#加法 7+2
echo $(( $x+$y))
#乘法
echo $((10*3))
#取商s=7/2=3
s=$(( $x/$y))
echo $s
#取余数yu=7%2=1
yu=$(( $x%$y))
echo $yu

​ ’ = ’ 赋值符号:将等号右边的值,赋值给等号左边的变量。

​ 判断两个数值是否相等:

​ ’ == ’ 恒等,判相等,如果两个数字相等,会返回一个Ture(成立,真)的结果,否则会返回一 个false(不成立,假)的结果;

例:10==10判断结果: true    10==20 判断结果: false

​ ’ != ’ 不等于,判不相等,如果两个数字不相等,会返回一个true的结果,否则返回一个false的结果

例: 10!=10 判断结果: false   10!=20 判断结果: true
3.判断条件语句/条件判断语句:if语句

格式一:if语句

思想:只关注条件成立后的操作;

​ if [ 判断条件 ]

​ then

​ 语句块

​ fi

套路:如果条件成立,然后执行语句块

格式二:if…else语句

思想:不管条件成立与否,都有对应的操作;

​ if [ 判断条件 ]

​ then

​ 语句块1(条件成立后要做的事情)

​ else

​ 语句块2(条件不成立要做的事情)

​ fi

4.关系运算符

​ ’ -eq ’ 判等于;

​ ’ -ne ’ 判不等于;

​ ’ -gt ’ 判大于右边;

​ ’ -lt ’ 判小于右边;

​ ’ -ge ’ 判大于等于右边;

​ ’ -le ’ 判小于等于右边;

5.布尔运算符

​ 主要连接多个判断表达式,操作结果只有truefalse;

​ 5.1>’ ! ’ 非运算; 思想:取反; !true=false !false=true

                 例:!90 -gt 75 ---> ! 90 > 75 --->true --->false

​ 5.2>’ -a ’ 与运算符;思想:连接多个判断表达式,只要有一个判断表达式结果为false,整体与出来的结果就是false(只要有false,结果就是false)

                 例:78>60 -a 12<90 -a 80>=100--->true -a true -a false ---> false

​ 5.3>’ -o ’ 或运算;思想:连接多个判断表达式,只要有一个判断表达式结果为true,整体或出来的结果就是true(只要有true,结果就是true)

                  #!/bin/bash
                  #定义一个变量
                  x=82
                  #非取反!82>=100! false ---> true
                  if[ ! $x -ge 100 ]
                  then
                     echo "A"
                  fi
                  #与 82>90-a82<=100false -a---> false true
                  if[ $x -gt 90 -a $x -le 100 ]
                  then
                     echo "B"
                  else
                     echo "C"
                  fi
                  #或82<200false -o true82==90---> true
                  if [ $x -eg 90 -o $x -lt  200 ]
                  then
                     echo "D"
                  else
                     echo "E"
                  fi
6.逻辑运算符:连接多个判断表达式,判断表达式需要用[[]]

​ 6.1>’ && ’ 逻辑与;只要有false,结果就是false;

​ 6.2>’ || ’ 逻辑或; 只要结果有true,结果就是true;

7.文件测试运算符

​ 用来检测文件的各种属性;

​ 7.1>’ -d ’ 判目录/文件夹;

​ ’ -f ’ 判文件;

​ ’ -r ’ 判可读;

​ ’ -w ’ 判可写;

​ ’ -x ’ 判可执行;

​ ’ -s ’ 判文件内容是否为空,有内容返回true;

​ ’ -e ’ 判文件是否存在;

8.字符串运算符

​ 8.1>判断字符串是否相等:

​ ’ = ’ 判相等;

​ ’ != ’ 判不相等/不等于;

​ 8.2>判断字符串长度是否为0:

​ ’ -z ’ 为0返回true;

​ ’ -n ’ 不为0返回true;

​ 8.3>判断字符串是否为空:

​ [ $变量名 ] 判断该变量中有没有存在字符串,不为空返回true;

9.’ test ’ 用来修饰判断条件 —[]

格式一:if test 判断条件

​ then

​ 语句块

​ fi

格式二:if test 判断条件

​ then

​ 语句块1

​ else

​ 语句块2

​ fi

三、shell语句的应用

1.if语句格式三:

思想:多条件的判定/判断操作;

               if   [  判断条件一  ]
​              then
​                 语句块1
​              elif [  判断条件二  ]
​              then
​                 语句块2
​              elif [  判断条件三  ]
​              then
​                 语句块3
​              elif [  判断条件四  ]
​              then
​                 语句块4
​              else
​                 语句块n
​              fi
2.循环语句;

思想:只要循环判断条件成立,程序/语句就会一直做操作/执行;

​ 2.1while语句

​ 格式:

      while((判断条件))
      do
        语句块(只要条件成立,就要一直被执行)
      done

​ 备注:当条件成立时,就要一直执行do和done之间的语句块;当条件不成立,循环语句就终止循环

​ 注意:1)在循环语句中,对于判断的运算符,使用的是:’ > ’ ’ < ’ ’ >= ’ ’ <= ’

​ 2)let命令:让…操作:let “变量的计算操作”

​ ’ ++ ’ 自增运算符 ’ +1 '; let " n++ "

​ ’ – ’ 自减运算符 ’ -1 '; let " m-- "

​ 2.2>for循环语句

​ 格式:

       for((定义循环变量;判断条件;变量的计算操作))
       do
         语句块(只要条件成立,就要一直被执行)
       done 
3.跳出循环的关键词

​ 3.1>’ break ’ 强制终止循环:只要循环体(do-done)中遇到break,无条件强制终止;

​ 3.2>’ continue ’ 跳转到循环开始的地方:

​ 死循环:指的是判断条件永远成立,程序执行根本停不下来;

4.语句之间的结合使用

​ 判断条件语句+循环条件;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咕咕在测试

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值