Linux的shell脚本编程

一、简介

        shell脚本就是一个文件

        在文件中包含了要批量自动执行的命令

写shell脚本的基本规范

 第一步:使用vi/vim 创建一个后缀是.sh的文件

 第二步:在文件中写入内容

        第一行是:#!/bin/bash   这是指定程序的解释器

        第二行开始就是文件的正文

第三步:保存退出

第四步:给shell脚本赋权【赋予执行权限 x】 如果使用bash  **.sh 的话是不用赋权的

第五步:执行shell脚本 ./ .sh  

shell脚本的注释  

shell脚本中,是用#进行注释的 ,是单行注释 

1.2 变量 

什么是变量?  值会发生变化的量 

name="yom"   name 就是变量名   tom是变量的值

 定义变量格式

变量名=变量值 【=两边不能留空格】 

变量名不能用引号

变量值可以用引号

        变量值是数字类型的,可以不用引号

        变量值是字符串类型的,必须用引号

2)变量名的要求(很多编程语言的变量名要求都是这个)

          1、见名知义  2、变量名中只能有数字、字母、下划线

          3、不能以数字开头   4、大小驼峰命名     、

使用变量: $变量名

注意:单双引号的问题  ''单引号无法将变量名替换成变量的值

如果涉及到变量名后紧跟字符的文件,需要将变量名用{}括起来  比如 ${变量名}s 这样

1.3 四则运算 

shell中 默认会将变量作为字符串,包括数字

如果想要进行数学运算的话,必须用shell中的格式

格式:$[数学表达式]

比如:num1=3 ;  num2=4   输出俩个数字的和

           echo "$[$num1+$num2]"

 1.4 补充内容

用户交互:read -p “提示用户输入的内容:” 变量名

提示信息是给用户看的‘

用户输入的内容会保存到后面的这个变量之中

命令执行状态值

输出结果重定向 

命令执行状态值

 执行状态是用来表示命令执行成功还是执行失败

 命令的执行状态值,默认是不显示的

        Linux命令执行成功,用0表示

        Linux命令执行失败,用非0表示

用Linux的内置变量   $?    可以查看最近的一个命令的执行状态值

命令的执行输出有两种结果 

输出结果:直接显示在终端上,给用户看的

状态结果:是给系统看的 

输出重定向

 输出重定向就是将原本输出在终端中的内容,保存带一个文件中

重定向分为三种:

        标准输出重定向(1,默认就是1,所以可以省略)  >   1>

        错误输出重定向(2,)2>

        全部输出重定向(&)  &> 正确的错误的输出都可以用来输入到新的文件

ls /home  /aaaaa.txt(这个文件并不存在)   这个命令既把正确的输出流,也把错误的输出了

我么可以这样写   l

s /home  /aaaaa.txt(这个文件并不存在)   2>1  1>/tmp/aaa.txt  

这样的话我们就可以即把错误的和正确的输出到文件中

另一种写法就是  ls /home /aaaaa.txt &>  /tmp/aaa.txt

> 将命令的输出结果保存到一个文件中

如果文件不存在,就会创建一个新文件,让后将命令输出结果保存进去

如果文件存在,那么会将文件中原有内容清空,然后将命令输出结果保存进去

>> 将命令的输出结果保存到一个文件中

如果文件不存在,就会创建一个新文件,让后将命令输出结果保存进去

如果文件存在,那么在文件中原有内容后进行追加

&>/dev/null  这样写的话会把我们的输出都重定向到了这个黑洞文件中,不会有东西显示

1.5 if判断

   判断格式  (必须要看格式来写,要不然容易出错)

 单分支: 

  if [ 判断表达式 ];then

           执行的命令 #判断条件成立的情况下,执行这里的语句

           执行的命令 #判断条件成立的情况下,执行这里的语句

  fi

双分支:

if [ 判断表达式 ];then 

        

         执行的命令 #判断条件成立的情况下,执行这里的语句

         执行的命令 #判断条件成立的情况下,执行这里的语句

else

        执行的命令 #判断条件不成立的情况下,执行这里的语句

fi

多分支:

if [ 判断表达式1 ];then 

        

         执行的命令 #判断条件1成立的情况下,执行这里的语句

         执行的命令 #判断条件成立的情况下,执行这里的语句

elif [ 判断表示式2 ];then 

        执行的命令 #判断条件2不成立的情况下,执行这里的语句

else

        执行的命令 #判断条件不成立的情况下,执行这里的语句

fi

判断对象

        判断数字  : 大小   相等   不相等

        判断字符串:相同与否

        判断文件:判断文件类型

        判断命令:命令执行成功与否

 判断数字

        大小   相等与否

 格式 :[ 数字  判断符 数字  ]

        判断服:-gt 大于   -lt 小于  -ge 大于等于   -le 小于等于    -eq  等于   -ne 不等于

判断字符串

相同与否

=   赋值

判断符    == 判断相等     !=  不等

格式 :[ 字符串1 判断符  字符串2 ]  

案例:让用户输入一个用户名,判断这个用户名的shell类型是/bin/bash 

#!/bin/bash

read -p "请输入用户名:" userName

# 判断用户名是否存在

# 如果用户不存在的情况下,退出程序

grep "^$userName\>" /etc/passwd &>/dev/null

num=$?

if [ $num -ne 0 ];then

        echo "你输入的用户名是 $userName,没有这个用户,再见."

        exit 5 # 退出程序,返回一个数字5

fi

# 如果用户存在的情况下,执行这里的操作

# 获取这个用户的shell类型

shellType=`grep "^$userName\>" /etc/passwd | awk -F ":" '{print $7}'`

# 判断shell类型

if [ $shellType == "/bin/bash" ];then

        echo "用户的shell类型是/bin/bash"

else

        echo "用户的shell类型不是/bin/bash"

fi 

组合条件
&& 逻辑与  要求多个条件要同时满足,则条件整体才是满足条件   

        可以依次执行多个命令 只有前面的命令执行成功,后面的才执行;如果前面的执行失败,后面的就不执行了

 ||    逻辑或  要求多个条件满足任意一个即认为整体条件是满足的

        可以依次执行多个命令 只有前面的命令执行失败,后面的命令才执行;如果前面的命令执行成功,后面就不执行了

 ! 逻辑非   对条件进行取反

 判断文件

        -a    -e  判断文件是否存在

        -f  判断文件是一般文件     -d   判断文件是目录文件

        [ 判断符号 文件名 ]

案例:让用户输入一个文件名,判断文件的类型

   #!/bin/bash

   read -p "请输入一个文件名:" fileName

   if [ -e $fileName ];then 

        if [ -f $fileName ];then

                echo "这个文件是一般文件"

        elif [ -d $filename ];then

                echo "这个文件是目录文件"

        else

                echo "我也不知道是个啥"

        fi

  else

        echo "no such file"

  fi 

判断变量【空】

 -n 当变量是非空的时候,返回为真 【条件成立】

 -z  当变量的值为空时,返回为真【条件成立】 

#!/bin/bash

read -p "请输入一个IP" ipAddress

num=`echo $ipAddress | wc -c` 

if [ $num -le 1];then

        echo "你没有输入内容"

        exit 5

else

        if ping -c1 -W1 $ipAddress &>/dev/null;then

                echo "存在"

        else        

                echo "不存在"

        fi

fi

ping -c1ping的次数  -W1  等待时间

#!/bin/bash

read -p "请输入一个IP" ipAddress

if [ -z $ipAddress ];then

        echo "你没有输入内容"

        exit 5

else

        if ping -c1 -W1 $ipAddress &>/dev/null;then

                echo "存在"

        else        

                echo "不存在"

        fi

fi

ping -c1ping的次数  -W1  等待时间

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值