Linux Shell脚本讲解

目录

Shell脚本基础

Shell脚本组成

Shell脚本工作方式

编写简单的Shell脚本

Shell脚本参数

Shell脚本接收参数

Shell脚本判断用户参数

文件测试与逻辑测试语句

整数测试比较语句

字符串比较语句

Shell流程控制

if条件判断语句

单分支

双分支

多分支

for循环语句(根据范围进行循环)

while循环语句(根据条件进行循环)

case条件测试语句(判断语句)


Shell脚本基础

Shell脚本组成

Shell脚本由三部分组成

 脚本声明、脚本注释、脚本命令

脚本声明

告诉系统我们是使用哪个解释器来执行Shell脚本

现在基本上都是使用/bin/bash解释器

所以一般脚本声明为 #!/bin/bash    

脚本注释

写一些说明信息(包括功能介绍、参数介绍等,可有可无)

此注释不会被系统读,只是让用户看的

#开头

脚本命令

通过这些命令来完成某些事情

Shell脚本工作方式

交互式  用户每输入一条命令就立即执行

批处理  用户事先编写一个完整的Shell脚本,Shell就会一次性执行脚本中的命令

编写简单的Shell脚本

简单的Shell脚本可以理解为就是命令的堆积,能够实现一些固定的功能

没有调节测试语句、循环语句赋予的灵活的调节判断功能

创建Shell脚本

shell脚本可以没有后缀,但是为了区分,可以给个后缀.sh

vim 123.sh  创建/编辑 名称为123的Shell脚本

编写简单的Shell脚本

#!/bin/bash                                   编写脚本声明

#this is test                                   编写脚本注释

pwd                                              编写脚本显示当前位置

grep /bin/bash /etc/passwd | wc -l  编写脚本显示可登录服务器的用户数量

执行Shell脚本

. 123.sh   路径+Shell脚本名,直接执行 Shell脚本(用户需要执行权限,可以更改权限)

         . 表示当前路径

bash 123.sh  bash shell脚本名称,通过bash命令调用Shell脚本


Shell脚本参数

Shell脚本接收参数

为了让Shell脚本程序更好地满足用户的一些实时需求

需要让脚本程序能够像之前执行命令那样接收用户的参数

此时就需要向Shell脚本传递参数

Shell脚本如何接收用户参数

在Shell脚本通过定义$N来接受用户输入的参数

   $1接收第一个位置参数

   $2  接收第二个位置参数

Shell脚本的特殊参数

   $0  脚本的名称

   $#  统计接收参数的总数(用户输入的所有参数的总数)

   $*  接收到的所有参数有哪些(用户输入的所有参数)

   $?  存储上一个返回值的结果

编写Shell脚本接收用户参数

编写Shell脚本

#!/bin/bash

#this is test

echo $1,$2,$4                             接收用户输入的第1、2、4个参数并输出

echo "neame is $0"                         显示脚本的名称

echo "count receive parameter number is  $#" 统计用户输入的参数总数

echo "all receive  parameter is $*"            用户输入的参数具体有哪些

执行脚本并输入参数

bash 123.sh 1 2 3 4 5

Shell脚本判断用户参数

判断语句格式:[ 条件表达式 ](注意条件表达式前后都有空格)

由于变量是没有定义类型的

在Shell中需要对输入的参数、变量进行类型判断(需要手动去完成,通过创建条件表达式完成)

根据测试对象的不同,条件表达式可分为以下4种

文件测试语句、逻辑测试语句(查看判断结果)、整数值比较语句、字符串比较语句

文件测试与逻辑测试语句

作用

判断文件是否存在

判断是什么类型的文件(一般文件、目录文件、设备(块)文件、链接文件、管道文件)

判断文件权限(写入、读取、执行权限)

具体操作符

[ -e 文件名称 ]     判断文件是否存在 

[ -f 文件名称 ]     判断文件是否为一般文件(-d 目录文件、-l 链接文件、-s 套接字文件、-b块设备文件、-c 字符设备文件、-p 管道文件)

[ -w 文件名称 ]     判断文件的权限是否可以写入(-r是否可以读取、-x是否可以执行)

进行判断后如何得到判断结果

方一 通过echo$? 来得到判断结果

echo $?    输出上一个返回值的结果(可以用此命令来查看判断文件的结果)

如果结果为0,表示上一个命令执行成功;非零表示上一个命令执行失败

此方法要使用两条命令查看,麻烦

方二  通过逻辑测试语句(逻辑操作操作符)来查看判断结果

与(&&)  前面的语句如果执行成功,执行后面的语句

或(||)    前面的语句如果执行失败,执行后面的语句

非(!)    取反值(! 代表取反值;!=代表不等于)

[ -e 文件名 ] && 命令    如果文件存在,就执行命令

[ ! -e 文件名 ]            将文件是否存在的结果取反

编写文件判断Shell脚本

#!/bin/bash

#this is test

[ -e /dev/fastab ]                      判断/dec/fstab文件是否存在

echo "this file $?"                      输出上一个判断文件执行结果

[ $USER=root ] && echo " be" || “no be”  如果当前用户为root,输出be,否则输出no be

整数测试比较语句

对于数字比较所使用的操作符不能用>、<,因为>、<是重定向符

数据比较通过操作符 -eq、-gt、-lt等来执行

 [ 1 -eq 2 ]    判断1是否等于2

 [ 1 -gt 2 ]     判断1是否大于2

 [ 1 -lt 2 ]      判断1是否小于2

 -ne          是否不等于

 -le           是否等于或小于

 -ge          是否大于或等于

编写整数比较语句

#!/bin/bash

#this is test

FREE=`free -m | grep Mem | awk '{print $4}'`           

将空闲内存的值赋值给变量FREE(awk '{print $4}'  将第4列的值打印出来)

[ $FREE -le 1024 ] && echo "$FREE is good" || echo "$FREE is bad"  

比较空闲内存大小,小于等于1024为good,否则为bad

字符串比较语句

-z   判断字符串内容是否为空

!=   比较字符串内容是否不同

=    比较字符串内容是否相同

编写字符串比较语句

#!/bin/bash

#this is test

[ -z $USER=root ]        判断当前用户是否为是root

echo $?

[ ! -z $USER=root ]       判断当前用户是否不是root

echo $?


Shell流程控制

if条件判断语句

if 条件测试语句(if开头,fi结尾),可以分为单分支、双分支、多分支

单分支

语句格式

   if 测试条件

     then 条件通过所执行的命令(可以多条,如果在同一行用 ; 分隔多条命令)

   fi

编写单分支脚本

#!/bin/bash

if [ ! -e /etc/admin ]                            判断/etc/admin是不是不存在

 then mkdir -p /etc/admin                       如果不存在,则创建/etc/admin

  echo `[ -e /etc/admin ] && echo 'create success'` 然后再判断/etc/admin是否创建成功

fi

双分支

语句格式

   if 测试条件

      then  条件通过所执行的操作

      else   条件没有通过执行的操作

fi

编写双分支脚本

#!/bin/bash

if [ ! -e /etc/admin ]     判断/etc/admin是不是不存在

then mkdir -p /etc/admin ; echo `[ -e /etc/admin ] && echo 'create success'`    如果文件不存在,创建文件并判断文件是否创建成功

else echo 'this file is be'  如果文件存在,则输出this file is be

fi

多分支

语句格式

    if 测试条件1

      then     条件1通过后执行的操作

    elif  测试条件2

      then     条件2通过后执行的操作

    else

         条件1和条件2都不满足的操作

    fi

多分支编程

#!/bin/bash

read -p "input number: " NUMBER      将用户输入的数据赋值到变量NMBER

if   [ $NUMBER -ge 80 ] && [ $NUMBER -le 100 ];then 判断值是否≥80,≤100

       echo 'good'                                   输出

elif [ $NUMBER -ge 60 ] && [ $NUMBER -le 79 ];then   判断值是否≥60,≤79

       echo 'pass'

elif [ $NUMBER -ge 0 ] && [ $NUMBER -le 59 ] ;then    判断值是否≥0,≤59

       echo 'fail'

else                                              以上条件都不满足

       echo 'again input'

read -p "Enter:" GRADE

 read 变量  读取单行数据内容,并将此内容赋值给变量GRADE

 -p 提示用户输入信息

注意:字母与数字不能够作比较,小数也不可以和整数比较

for循环语句(根据范围进行循环)

语句格式

 for 变量名 in 取值列表

   do

      操作命令

   done

编写for循环语句

#!/bin/bash

read -p "input passwd: " PASSWD        输入密码并赋值到变量PASSWD

for USER1 in `cat user.txt`               从文件中提取数据赋值到变量USER1

do

       id $USER1 &> /dev/null    查看用户信息并将回显的内容送到黑洞

       if [ $? -eq  0 ];then        如果用户存在,即上个命令执行成功,输出用户is be

          echo "$USER1 is be"

       else                     如果用户不存在,上个命令执行就不成功,执行以下命令

          useradd $USER1 &> /dev/null 

          echo $PASSWD | passwd --stdin $USER1 &> /dev/null

       fi

done

while循环语句(根据条件进行循环)

只要条件为真,则一直循环,只要条件不成立,才会停止

语句格式

 while 条件

   do   执行操作

   done

while true   一直循环下去,直到遇到强制退出符

case条件测试语句(判断语句)

语句格式

 case  变量值 in 范围值1)

          输出命令1

             ;;

      范围值2)

          输出命令2

             ;;

       *)

          默认命令

  esac

注意

case 命令只有右边的小括号,没有左边的小括号

case语句中的 | 指的是 逻辑或 的意思

* 匹配的是空值或者无穷多的信息

前面的输出命令后面要加;;   最后的默认命令后面不需要加;;

编写case判断语句

#!/bin/bash

read -p "input :" KEY

case "$KEY" in

        [a-z]|[A-Z])

                echo "$KEY this is  letter"

                ;;

        [0-9])

                echo "$KEY this is number"

                ;;

        *)

                echo "$KEY this is ohter characters"

esac

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

静下心来敲木鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值