Shell脚本的使用

作业:输入一个年份,判断是否是润年

一、shell脚本

Shell:贝壳 保护内核

C++:属于编译型语言,需要使用编译器gcc,执行速度快,不可以和内核交互

Shell:解释型语言(可以和内核直接交互),需要使用解析器bash,执行速度慢

Shell:shell的本质是指令的集合,但是指令需要默许一点的逻辑关系,在使用解析器解析脚本文件时,按照一定的逻辑关系进行执行

二.Shell脚本的创建

1、vim  **.sh  创建

#!+tab补全  ——>#!/bin/bash

#!:表示这是一个脚本文件

/bin/bash:使用的解析器bash

2、注释

#:单行注释

  /shell中没有多行注释,但是可以用指令模拟多行注释(

<<a

  A

三、bash解析器

1、查看使用的解析器:

  1. echo $SHELL
  2. cat etc/shells

2、认识解析器

      bash:用于Ubuntu和debain操作

      sh:最早的解析器,和终端交互较差

      dash:类似sh

      csh:类似c语言,需要许可证

  1. bash ***.sh            可以不具备可执行权限

                                        在当前终端下的终端进行,把结果返回给当前终端

  1. chomd 777 ***.sh      需要具备权限

                 ./***.sh

                                         在当前终端下的终端进行,把结果返回给当前终端

  1. source ***.sh          可以不具备可执行权限 

                                            直接在当前终端执行

四、修改环境变量

1.查看环境变量

      指令:env           

SHELL=/bin/bash

HOME=/home/ubuntu

USERNAME=ubuntu

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:sbin:/bin:/usr/games:/usr/local/games:/snap/bin

OLDPWD=/home/ubuntu/Pictures

2、对当前终端有效

      1、添加对PATH指定路径

            Export PATH =$PATH:/home/ubuntu/Pictures/7.16/

              |             |                |                         |

              |             |                |                    添加的指令路径    

              |             |                |

              |             |                展开环境变量的值

              |       环境变量

             类似extern

3、对当前用户有效

1、在~/.bashrc文件中添加以下语句

   export PATH=$PATH:

2、使修改的文件生效

   source ~/.bashrc

3、为文件添加可执行权限

   chmod 777   ***.sh

4、执行

            文件名

4、对所有用户有效

1、在/etc/bash.bashrc文件中添加以下语句

   export PATH=$PATH:

2、使修改的文件生效

   source/etc/bash.bashrc  或者重启

3、为文件添加可执行权限

    chmod 777   ***.sh

4、执行

   文件名

5、对所有用户有效

1、在/etc/profile文件中添加以下语句

   export PATH=$PATH:

2、使修改的文件生效

   source/etc/profile  或者重启

3、为文件添加可执行权限

    chmod 777   ***.sh

4、执行

   文件名

6、对所有用户有效

1、在/etc/environment文件中添加以下语句

   export PATH=$PATH:

2、使修改的文件生效

   source/etc/environment  或者重启

3、为文件添加可执行权限

   chmod 777   ***.sh

4、执行

   文件名

五、shell变量

1、shell变量的定义格式

        1.shell的变量没有数据类型,默认是字符串

         2.shell的变量默认是全局变量

   1、格式:

       变量                            error

       变量=                          定义变量值为空

       变量=初始化的值        定义变量值为初始化的值

Eg:

     a        shell认为是一个指令,报错

     a=       定义变量值a为空

     a=100    定义变量a值为100

2.shell变量定义以及初始化

     1. shell初始化的值=号的左右两端不允许存在空格,认为是一个指令

           1.格式:

              变量=初始化的值

              变量= “初始化的值”

              变量=‘初始化的值‘

           2.初始化的值没有空格

             a=hello

             a=”hello”

             a=’hello’

           3、初始化的值存在空格(有无引号)

             a=hello world        error

             a=”hello world”

             a=’hello world’

           4、使用变量对另一个变量初始化(单引号和双引号的区别)

             a=hello

             b=$a         >b=hello

             b=’$a’        >b=$a

             b=”$a”      >b=hello

           5、建议在引用变量值的时候使用${}

            

             a=hello

             b=world     

             c=$a$b          >helloworld

             c=$aworld”      >把aworld看成一个整体

             c=${a}world    >helloworld

3、shell变量的引用

    格式1:   $变量

    格式2:${变量}   建议

      var=hello

      echo $var             /      echo ${var}

4、位置变量

位置变量:类似C语言的argc argv,用来接收外部输入的字符串

作用于函数的传参

$0    文件名

$1    终端输入的第一个字符串

……

${n}                    第n个字符串

5、预定义变量

         $*            终端输入的所有字符串,不包括文件名

         $@          终端输入的所有字符串,不包括文件名

         $#            终端输入字符串的个数

         $$            当前终端的进程号

          $?          获取上一行指令的结果,如果上一行指令运行成功则为0,失败则为非0多用于接收                          函数的返回值

6、命令置换

      命令置换:把指令的结果赋值给变量

      格式1:

              变量=$(指令)

              变量=·指令·

7、特殊符号

1.    readonly  只读

2.     unset     取消变量,不可以取消只读类型的变量

3、   local      定义局部变量

六、输入输出

1、输出echo

      echo  字符串             echo hello

      echo  '字符串'            echo 'hello'

      echo  "字符串"          "echo hello"

      a=100

      echo  $a    >100

      echo  ' $a'   >$a

      echo  "$a"   >100

      echo  -n  “hello world”     >取消换行

      echo  -e  "\thello world"   >使转义字符起效果

2、输入 read

1.输入一个或多个变量,数据元素之间以空格,tab表示数据输入的结束,回车表示read的结束

         read  a

        read   a b c d

2.显示提示语句

         read  -p "字符串"   a

3.输入n个字符自动结束

         read  -n 5 a

4.n秒不输入自动结束

         read  -t 5  a

5.隐藏输入 ,密码

         read -s a

6、输入数组

         read -a arr

         echo ${arr[0]}

七、shell的字符串

1、c语言的字符串是一个数组,shell的字符串是一个变量

1、计算字符串长度

   格式:${#str}

2、字符串拼接

b=world   c=$a$b

3、字符串截取

1、正向截取

         ${str:m}                从左到右,从0开始,截取第m以后的所有字符串

         ${str:m:n}          从左到右,从0开始,截取第m开始n个字符串

2、反向截取

         ${str:0-m}             从右到左,从1开始,截取第m以后的所有字符串

         ${str:0-m,n}          从右到左,从1开始,截取第m以后n个字符串

3、#  ##  %% %

string:分隔符
${str#*string}            从左到右,截取第一个分隔符后面的所有字符串
${str##*string]          从左到右,截取最后一个分隔符后面的所有字符串
${str%string*}           从右到左,截取第一个分隔符的前面所有字符串
${str%%string*}        
从右到左,截取最后一个分隔符前面的字符串

str=www.baidu.com

${str#*.}       baidu .com
 

${str##*.}      com

${str%。*}     www . baidu

${str%%.*}     www

八、shell的数组

1、c语言中存在多维数组,shell中只有一维数组,不存在多维数组

2、shell中输入的每个元素是字符串

1、数组的定义格式以及初始化

        1.数组的定义以及初始化
                  arr=(100 22 33 44)
         2.she1l支持稀疏数组,数组长度为2
                  arr=([0]=100[3]=hello)
         3.she1l的单个赋值
                  arr[0]=100
                   arr[3]=hello
        4.追加赋值
                   arr=(11 22 33)
                   arr[3]=hello
         5.数组拼接
                  a=(11 22)
                  b=(44 55 77)
                  c=(${a[*]} ${b[*]})
                  c=(${a[@]} ${b[@]})


2、数组的引用

       arr=(11 22 33 44)
1.单个引用
       ${arr[index]}
2.引用所有数组元素,默认中间使用空格隔开
        ${arr[*]}
        ${arr[@]}
3.计算数组长度
        ${#arr[*]}
         ${#arr[@]}
4.计算某一个字符串的长度
         ${#arr[index]}

九、运算符

1.shell不擅长做算术运算,擅长字符串以及文件的相关操作
2.shell的运算符

 

           (()):实现算术运算,关系运算,逻辑,条件,逗号等 针对整数
            $[]:实现算术运算,关系运算,逻辑,条件,逗号等 针对整数
            let :实现算术运算,关系运算,逻辑,条件,逗号等 针对整数
            expr 实现字符串,关系运算,逻辑运算

1、(())

格式:((表达式))

引用:

          ((变量=表达式))

          变量=$((表达式))

特点:


1.表达式的空格可有可无
2.表达式的$可有可无
3.(())可以实现任意复杂的运算:算数、关系、逻辑、条件等
4.(())可以实现自增或自减运算   ((a++))
5.(())可以实现幂运算

例:判断时分秒

输入时长 read -p "second" second

输出时间 echo $((second/3600))时$((second%3600/60))分$((second%60))

2、$[]

格式:变量=$[表达式]

特点:


1.表达式的空格可有可无
2.表达式的$可有可无
3.$[]可以实现任意复杂的运算:算数、关系、逻辑、条件等
4.$[]可以实现自增或自减运算   ((a++))
5.$[]可以实现幂运算

例:输入三个数,输出最大值

输入三个数 read -p "请输入三个数" a b c

判断最大值 max=$[(a>b&&a>c)?a:(b>a&&b>c?b:c)]

输出     echo max=$max

3、let

格式:
            let 变量=表达式            不可存在空格
            let"变量=表达式”           可以存在空格 

 

特点:


1.表达式的空格可有可无
2.表达式的$可有可无
3.1et可以实现任意复杂的运算:算数、关系、逻辑、条件等
4.let可以实现自增或自减运算
5.let可以实现幂运算

4、expr

1.expr是一个指令,可以使用man手册查看
2.expr可以对整数(算数、关系、逻辑),字符串实现操作

格式:
变量=$(expr 表达式)
变量=·expr 表达式·

特点:
 

1.表达式的空格必须存在
2.表达式的$必须存在,在必要需要已添加""
3.expr可以实现算数,关系,逻辑,字符串运算
4.expr不可以实现自增或自减运算
5.expr不可以实现幂运算

i算数运算

格式: value=`expr $a (运算符)  $b`

ii、关系运算

j

iii、逻辑运算

      变量=·expr $a & $b·

iv、字符串运算

1.返回指定字符(串)在另一字符串中出现重复的字符个数

         a=he
         str=hello
         value= 'expr  match $str $a'
         #a在str中相同字符的个数

2、字符串截取

         str=www.baidu.com
         value=`expr substr $str 5 5 '    baidu

3、查找字符在字符串中出现的下标,不存在返回0

         str=hello    a=l
         value=`expr index $str $a `

4、计算字符串长度

         str=hello world
         value=`expr length $str`

十、shell的选择结构

C语言的选择结构:单分支if 双分支if..else 多分支if..else if switch
shell的选择结构:单分支if双分支ifelse 多分支if el  if    case..in

1、选择结构格式

单分支

if   表达式

then

     shell语句

fi

执行流程:如果表达式为真,则执行shell语句,否则跳过

双分支

if   表达式

then

     shell语句

else

    shell语句2

fi

执行流程:表达式为真,则执行shell语句1,否则执行she11语句2

多分支

if   表达式

then

     shell语句

elif 表达式2

then

     shell语句2

…………

else

    shell语句n

fi

执行流程:如果表达式1为真,则执行she11语句1,结束选择结构
如果表达式1为假,则判断表达式2,如果表达式2为真,则执行shel1语句2,结束选择结构
如果表达式2为假,则重复以上过程,如果所有表达式均为假,则执行else

2、test指令

一般if语句不直接和运算符结合使用,多和test指令结合
1.test是一个指令,必须存在空格,必须添加$必要时使用"
2.test指令实现:逻辑运算,整数关系,字符串,文件
3.test等价于[]

if   [ 表达式 ]

then

     shell语句

fi

if   test  表达式

then

     shell语句

fi

i.关系运算——>整数

eq:——>     ==
gt:——>      >
ge:——>   >=
-lt:——>   <
-le:——>   <=
-ne:——     >!=

ii逻辑运算

if [ $a -ne 0 ]——》if[ $a ]

if[ $a -eq 0 ]——》if [ ! $a ]

if[ $a -ge 90 -a $a le 100]——》if[ $a -ge 90 ]&&[ $a  -le 100 ]

if[ $a -lt 0 -o $a -gt 100 ]——》if[ $a -lt 0 ] ||[  $a -gt 100 ]

  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值