shell脚本编程

1.1 简介

shell脚本就是一个文件,在文件中包含了要批量自动执行的命令

        写shell脚本的基本规范

1、 用vi/vim创建一个后缀是.sh的文件

2、 在文件中写入内容

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

               第二行开始是文件的正文

3、保存退出

4、给shell脚本赋权【赋予执行权限x】

5、执行shell脚本

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

执行shell脚本:./脚本

1.2 变量

变量:值会发生变化的对象

定义变量:

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

2、变量名不能用引号

3、变量值可以用引号

        变量值是数字类型,则不引号

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

 变量名的要求:

1、只能有数字、字母、下划线(_)

2、不能以数字开头

3、变量名要做到见名知意

4、建议定义格式

        单驼峰格式:stuName

        双驼峰格式:StuName

        下划线拼接:stu_name

 使用变量:$变量名

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

1.3 用户交互

格式:

read -p "给用户的提示:" 变量名

提示信息是给用户看的,用户输入的内容会保存到后面这个变量中

 例:

#!/bin/bash
read -p "请输入你的姓名:" stuName
read -p "请输入你的年龄:" stuAge
read -p "请输入你的性别:" stuSex

echo "欢迎:$stuName,你的年龄是:$stuAge,性别是:stuSex"

1.4 四则运算

格式:

$[数学表达式]

例子:

#!/bin/bash
read -p "请输入第一个数字:" num1
read -p "请输入第二个数字:" num2
read -p "请输入第三个数字:" num3

sum=$[$num1+$num2+$num3]
echo "三个数字的和:$sum"

1.5 补充

命令执行状态值

输出结果重定向

 命令执行状态值

执行状态是用来表示命令执行成功还是执行失败
命令的执行状态值,默认是不显示的
linux命令执行成功,用0表示
linux命令执行失败,用非0表示
用linux的内置变量$?可以查看 最近的一个命令 的执行状态值

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

输出结果:直接显示在终端上,给用户看的
状态结果:是给系统看的

 输出重定向

输出重定向就是将原本要输出在终端中的内容,保存到一个文件中
重定向分为三种:
正确输出重定向(1,默认就是1,所以可以省略)
错误输出重定向(2,)
全部输出重定向(&)

两种写法 

> 将命令的输出结果保存到一个文件中
如果文件不存在,就会创建一个新文件,让后将命令输出结果保存进去
如果文件存在,那么会将文件中原有内容清空,然后将命令输出结果保存进去
>> 将命令的输出结果保存到一个文件中
如果文件不存在,就会创建一个新文件,让后将命令输出结果保存进去
如果文件存在,那么在文件中原有内容后进行追加
案例:让用户输入一个用户名,判断这个用户是否存在
#!/bin/bash
read -p "请输入一个用户:" userName 
id $userName &> /dev/null
ehco "判断用户的执行结果:$?"

1.6 if判断

单分支
if 判断表达式;then
执行的命令 #判断条件成立的情况下,执行这里的语句
执行的命令 #判断条件成立的情况下,执行这里的语句
执行的命令 #判断条件成立的情况下,执行这里的语句
fi

多分支

if 判断表达式;then
执行的命令 #判断条件成立的情况下,执行这里的语句
执行的命令 #判断条件成立的情况下,执行这里的语句
执行的命令 #判断条件成立的情况下,执行这里的语句
else
执行的命令 #判断条件不成立的情况下,执行这里的语句
执行的命令 #判断条件不成立的情况下,执行这里的语句
执行的命令 #判断条件不成立的情况下,执行这里的语句
fi
多分支
if 判断表达式1;then
执行的命令 #判断条件1成立的情况下,执行这里的语句
执行的命令 #判断条件1成立的情况下,执行这里的语句
执行的命令 #判断条件1成立的情况下,执行这里的语
elif 判断表达式2;then
执行的命令 #判断条件2成立的情况下,执行这里的语句
执行的命令 #判断条件2成立的情况下,执行这里的语句
执行的命令 #判断条件2成立的情况下,执行这里的语句
elif 判断表达式3;then
执行的命令 #判断条件3成立的情况下,执行这里的语句
执行的命令 #判断条件3成立的情况下,执行这里的语句
执行的命令 #判断条件3成立的情况下,执行这里的语句
else
执行的命令 #判断条件都不成立的情况下,执行这里的语句
执行的命令 #判断条件都不成立的情况下,执行这里的语句
执行的命令 #判断条件都不成立的情况下,执行这里的语句
fi

1.7 判断数字

        大小

        相等

        不相等

格式:

[ 数字 判断符 数字]

判断符

1、 -gt 大于
2、 -lt 小于
3、 -ge 大于等于
4、 -le 小于等于
5、 -ne 不等于
6、 -eq 等于

案例1:让用户输入两个数字,输出较大的数字

#!/bin/bash
read -p "请输入第一个数字:" num1
read -p "请输入第二个数字:" num2

if [ $num1 -gt $num2 ];then
    echo $num1
else 
    echo $num2
fi

案例2: 让用户输入两个数字,判断两个数字的和是否大于100

#!/bin/bash
read -p "请输入第一个数字:" num1
read -p "请输入第二个数字:" num2
sum=$[$num1+$num2]
if [ $sum -gt 100 ];then
    echo "和大于100"
else [ $sum -lt 100 ]
    echo "和小于100"
else
    echo "和等于100"
fi

案例3: 让用户输入一个用户名,判断这个用户名是否存在

#!/bin/bash
read -p "请输入一个用户名:" userName
id $userName &> /dev/null
num=$?
if [ $num -eq 0 ];then
    echo "$userName 存在"
else
    echo "$userName 不存在"
fi

1.8 判断字符串

        相同

        不相同

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

判断格式

[ 字符串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\>" /ect/passwd | awk -F ":" '{print NF}'`
if [ $shellType == "/bin/bash" ];then
    echo "用户的类型是/bin/bash"
else
    echo "用户的类型不是/bin/bash
fi

1.9 组合条件

&& 逻辑与,要求多个条件要同时满足,则条件整体才是满足条件
|| 逻辑或,要求多个条件满足任意一个即认为整体条件是满足的
! 逻辑非,对条件进行取反

案例:让用户输入账号和密码,检查用户的输入,若账号是root,密码是123456,则提示登陆成功,否则登录失败

#!/bin/bash
read -p "请输入账号:" userName
read -p "请输入密码:" userPass
if [ $userName == "root" ] && [ $userPass == "123456" ];then
    echo "登陆成功"
else
    echo "登录失败" 
fi

扩展

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

1.10 判断文件

格式:

[ 判断符号 文件名 ]

判断符

-a 判断文件存在
-e 判断文件存在
-f 判断文件是一般文件
-d 判断文件是目录文件

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

#!/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

案例2:让用户输入一个文件,判断文件的类型,如果是一个文件,检查这个文件中是否有以#开头的行

#!/bin/bash
read -p "请输入一个文件名:" fileName
if [ -e $fileName ];then
    if [ -f $fileName ];then
        grep "^#" $fileName &> /dev/null 
        num=$?
        if [ $num -eq 0 ];then
            echo "$fileName 是一般文件,且有以#开头的行"
        else
            echo "$fileName 是一般文件,但没有以#开头的行"
        fi
    elif [ -d $fileName ];then
        echo "$fileName 是目录文件"
    esle
        echo "其他"

else
    echo "no such file"
fi

1.11 判断命令

判断命令有两种格式

格式1:获取命令状态值,然后判断这个值是否为0

格式2:直接判断命令

案例1:让用户输入一个用户名,判断这个用户是否存在

#!/bin/bash
read -p "请输入输入一个用户:" userName
id $userName &>/dev/null
num=$?
if [ $num -eq 0 ];then
echo "存在"
else
echo "不存在"
fi

案例2:让用户输入一个ip,判断这个ip是否在线

#!/bin/bash
read -p "请输入输入一个ip:" ipAddress
if ping -c1 -W1 $ipAddress &>/dev/null;then
echo "存在"
else
echo "不存在"
fi

1.12 判断变量【空】

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

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

 案例:

#!/bin/bash
read -p "请输入一个ip地址:" ipAddress
if [ -z $ipAddress ];then
    echo "你没输入"
    exit 5
fi

if ping -c1 -W1 $ipAddress &> /dev/null;tehn
    echo "存在"
else
    echo "不存在" 
fi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值