Shell脚本编写方法

1.Shell脚本概念

Shell 脚本是一种用于自动化执行一系列命令和操作的脚本文件。它使用的是 Shell 解释器(如 Bash、Korn Shell、Zsh 等)来解释和执行其中的命令。Shell 脚本通常用于编写简单的任务和工作流程,可以帮助我们进行系统管理、批量处理、自动化部署等任务。

以.sh后缀名结尾的文件来表示该文件是一个Shell脚本。

Shell脚本就是将命令写入文本中,文本可以被执行。

2.Shell脚本参数

$0:表示当前脚本的名称。

$*:表示脚本的所有参数。

$#:表示脚本的参数的个数。

$n:表示脚本的第n个参数,n=1,2,3…

$? :程序执行完后的结果,返回值0表示执行成功。

3.Shell脚本参数判断

-d:测试文件是否为目录类型,是目录返回0,不是目录返回非0值。

-e:测试文件是否存在。

-f:判断是否为一般文件。

-r:判断当前用户对该文件是否有读取权限。

-w:判断当前用户对该文件是否有写入权限。

-x:判断当前用户对该文件是否有执行权限。

4.逻辑测试语句

逻辑运算符:

&&(必须保证两边都为真,条件才会成立,只要有一个为假条件都不会成立,即只有当左侧命令执行成功时,右侧的命令才会被执行。)

||(两边有一个为真就为真,两边都为真也为真,两边为假才为假。)

5.整数值测试语句

整数的比较运输符

-eq:是否等于

-ne:是否不等于

-gt:是否大于

-lt:是否小于

-le:是否等于或小于

-ge:是否等于或大于

6.定义变量

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

echo $Freemem # 输出变量

例如:如果这个值小于1024的时候,会输出内容不足的提示信息。

[ $Freemem -lt 1024 ] && echo "内存不足"

7.字符串比较语句

字符串比较:

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

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

-z:判断字符串内容是否为空,如果为空返回0表示真,如果不为空返回1。

判断当前系统是否支持中文。

[ $LANG = zh_CN.UTF-8 ] && echo "支持中文" || echo "不支持中文"

8.Shell流程控制语句

流程控制语句

if

then

else

fi

if 例如:判断home目录下是否存在test目录,如果不存在则创建一个。

#!/bin/bash

DIR="/home/test"

if [ ! -e $DIR ]

then

        mkdir -p $DIR

fi

if else 例如:判断给定的IP是否正常

说明:

“-c 3” 选项表示发送 3 个 ICMP 请求消息,并等待每个请求的响应。

“-i 0.2” 选项表示设置每个 ICMP 请求的时间间隔为 0.2 秒(即每 200 毫秒发送一个请求)。

“-W 3” 选项表示设置等待响应的超时时间为 3 秒。

#!/bin/bash

if [ -z $1 ]

then

        echo "作者:小薛"

        echo "该命令检测服务器IP是否正常"

        echo "直接在命令后面加参数IP就可以执行"

else

        ping -c 3 -i 0.2 -W 3 $1 &>/dev/null

        if [ $? -eq 0 ]

        then

                echo "$1该IP是正常的"

        else

                echo "$1该IP无法ping通"

        fi

fi

if…elif…else 例如:判断学员考试分数如何

说明:

“-p” 选项用于在用户输入之前显示一个提示信息。

“read” 是一个 Bash 内置命令,用于从标准输入中读取用户输入并将其赋值给一个变量。

“fenshu” 是用于存储用户输入值的变量名。

#!/bin/bash

read -p "请输入分数(1-100):" fenshu

if [ $fenshu -ge 85 ] && [ $fenshu -le 100 ];then

        echo "该学生成绩为优秀"

elif [ $fenshu -ge 70 ] && [ $fenshu -le 84 ];then

        echo "该学生成绩为合格"

else

        echo "该学生成绩为不合格"               

fi

9.Shell脚本循环

批量添加用户

说明:–stdin:选项告诉passwd命令从标准输入(stdin)读取密码,而不是要求用户手动输入密码。

#!/bin/bash

read -p "请输入密码:" PASSWORD

for USERNAME in `cat user.txt`

do      

        id $USERNAME &> /dev/null

        if [ $? -eq 0 ]

        then    

                echo "$USERNAME用户已存在!"

        else    

                useradd $USERNAME &> /dev/null

                echo "$PASSWORD" | passwd --stdin $USERNAME &> /dev/null

                echo "$USERNAME用户创建成功"

        fi      

done

批量删除用户

#!/bin/bash

for USERNAME in `cat user.txt`

do

        id $USERNAME &> /dev/null

        if [ $? -eq 0 ]

        then

                userdel -r $USERNAME &>/dev/null

                echo "$USERNAME用户已删除"

        else

                echo "$USERNAME用户不存在!"

        fi

done

批量ping IP 地址

说明:“$()” 是 Bash 中的命令替换语法,它表示将命令的输出结果作为一个整体嵌入到命令行中。

#!/bin/bash

HOSTLIST=$(cat /root/iplist.txt)

for IP in $HOSTLIST

do

        ping -c 3 -i 0.2 -W 3 $IP &>/dev/null

        if [ $? -eq 0 ]

        then    

                echo "$IP该IP是正常的"

        else    

                echo "$IP该IP无法ping通"

        fi      

done

检测同一局域网,多台主机存活情况

方式一:

#!/bin/bash

read -p "请输入网络位:" NETWORK

for ((IP=1;IP<=100;IP++))

do

        ping -c 3 -i 0.2 -W 3 $NETWORK.$IP &> /dev/null

        if [ $? -eq 0 ]

        then

                echo "$NETWORK.$IP该IP可以ping通"



        else

                echo "$NETWORK.$IP该IP无法ping通!!!!!!!"

        fi

done

方式二:

说明:“seq” 是一个用于生成序列的命令。“1” 是序列的起始值。“254” 是序列的结束值。

#!/bin/bash

read -p "请输入网络位:" NETWORK

for IP in `seq 1 254`

do

        ping -c 3 -i 0.2 -W 3 $NETWORK.$IP &> /dev/null

        if [ $? -eq 0 ]

        then

                echo "$NETWORK.$IP该IP可以ping通"



        else

                echo "$NETWORK.$IP该IP无法ping通!!!!!!!"

        fi

done

while循环

基本格式如下:

while 条件

do

命令序列

done

例如:猜测商品价格

说明:$RANDOM是linux中的内置变量,可以随机生成0-32767之间的整数数字。

“expr” 是一个用于执行基本数学运算或字符串操作的命令。

#!/bin/bash

echo "该商品价格在0~1000之间,输入价格来猜一猜"

TIMES=0

PRICE=$(expr $RANDOM % 1000 )

while true

do

        read -p "请输入价格:" INT

        let TIMES++

        if [ $INT -eq $PRICE ]

        then    

                echo "恭喜您猜对了该商品的及格,价格为$INT"

                echo "您猜了$TIMES次"

                exit

        elif [ $INT -gt $PRICE ];then

                echo "您所输入的价格高了"

        else

                echo "您所输入的价格低了"

        fi      

done

case条件测试语句

基本格式如下:

case 变量值 in

模式1

命令序列1

模式2

命令序列2

....

默认命令序列

esac

例如:判断输入的是字母,数字,还是特殊符号

#!/bin/bash

read -p "请输入一个字符:" KEY

case "$KEY" in

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

                echo "这是字母"

                ;;

        [0-9])

                echo "这是数字"

                ;;

        *)

                echo "这是特殊符号"

esac
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

梦龙zmc

欢迎评论!!!

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

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

打赏作者

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

抵扣说明:

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

余额充值