wordpress更换主题菜单,网站怎样做优化,山东网站优化推广,活动宣传推广的形式有哪些文章目录 简单Shell脚本编写1. 简单脚本编写2. Shell脚本参数2.1 Shell脚本参数判断2.1.1 文件测试语句2.1.2 逻辑测试语句2.1.3 整数值测试语句2.1.4 字符串比较语句 3. Shell流程控制语句3.1 if 条件测试语句3.1.1 if...3.1.2 if...else...3.1.3 if...elif...else 4. Shell脚… 文章目录 简单Shell脚本编写1. 简单脚本编写2. Shell脚本参数2.1 Shell脚本参数判断2.1.1 文件测试语句2.1.2 逻辑测试语句2.1.3 整数值测试语句2.1.4 字符串比较语句 3. Shell流程控制语句3.1 if 条件测试语句3.1.1 if...3.1.2 if...else...3.1.3 if...elif...else 4. Shell脚本循环4.1 for循环4.1.1 批量添加用户4.1.2 批量删除用户4.1.3 批量ping IP 地址4.1.4 检测同一局域网多台主机存活情况 4.2 while循环4.3 case条件测试语句 简单Shell脚本编写
Shell脚本概念
Shell 脚本是一种用于自动化执行一系列命令和操作的脚本文件。它使用的是 Shell 解释器如 Bash、Korn Shell、Zsh 等来解释和执行其中的命令。Shell 脚本通常用于编写简单的任务和工作流程可以帮助我们进行系统管理、批量处理、自动化部署等任务。
以.sh后缀名结尾的文件来表示该文件是一个Shell脚本。
Shell脚本就是将命令写入文本中文本可以被执行。
1. 简单脚本编写
文件内容如下 编写完脚本后赋权文件的执行权限
方式一
chmod x 脚本文件方式二
bash 脚本文件2. Shell脚本参数
$0表示当前脚本的名称。
$*表示脚本的所有参数。
$#表示脚本的参数的个数。
$n表示脚本的第n个参数n123…
$? 程序执行完后的结果返回值0表示执行成功。
#!/bin/bash
echo 当前脚本名称$0
echo 总共有$#个参数分别是$*。
echo 第一个参数为$1第三个参数为$3在执行该Shell脚本文件的时候在后面添加三个参数分别是wuhu1wuhu2wuhu3。
执行结果 注意 双引号会解释变量 单引号会把变量当成字符串表示
2.1 Shell脚本参数判断
2.1.1 文件测试语句
-d测试文件是否为目录类型是目录返回0不是目录返回非0值。-e测试文件是否存在。-f判断是否为一般文件。-r判断当前用户对该文件是否有读取权限。-w判断当前用户对该文件是否有写入权限。-x判断当前用户对该文件是否有执行权限。
判读是否为目录
[ -d /etc/passwd ]
echo $? # $?返回上一次执行命令的结果说明这里的[]中输入的内容前后需要加空格 返回值为1表示/etc/passwd不是目录。
判断当前目录下的wuhu是否为目录 判断是否为文件
[ -f /etc/passwd ]
echo $? # $?返回上一次执行命令的结果返回值为0表示/etc/passwd是文件。
2.1.2 逻辑测试语句
逻辑运算符
||
问题上面所输入命令十分的繁琐是否可以使用一条命令来完成上面的操作
注意这里是不能使用管道符的使用管道符发现两次的输出值是不一样的。 可以使用****符号 必须保证两边都为真条件才会成立只要有一个为假条件都不会成立。只有当左侧命令执行成功时右侧的命令才会被执行。
[ -f /etc/passwd ] echo /etc/passwd是一个文件
[ -d wuhu ] echo wuhu是一个目录[ $USER root ] echo 该用户是超级管理员用户还可以使用**|| **符号
|| 两边有一个为真就为真两边都为真也为真两边为假才为假。如果左侧命令执行成功返回值为零则右侧的命令将不会被执行。
[ $USER root ] || echo 该用户是超级管理员用户 # 表示当前用户不是root输出对应的语句[ ! $USER root ] || echo 该用户是超级管理员用户 # 表示当前用户是root输出对应的语句例如要求普通用户输出user管理员用户输出superuser
[ ! $USER root ] echo user || echo superuser切换回普通用户执行该命令 2.1.3 整数值测试语句
整数的比较运输符
-eq是否等于-ne是否不等于-gt是否大于-lt是否小于-le是否等于或小于-ge是否等于或大于
[ 9 -eq 8 ]
echo $?[ 9 -ne 8 ]
echo $?free查看内存 现在需要输出free中的Mem这一行
free -m | grep Mem | awk {print $4}定义变量
Freememfree -m | grep Mem | awk {print $4}
echo $Freemem # 输出变量例如如果这个值小于1024的时候会输出内容不足的提示信息。
[ $Freemem -gt 1024 ] echo 内存不足
[ $Freemem -lt 1024 ] echo 内存不足2.1.4 字符串比较语句
字符串比较
比较字符串内容是否相同。!比较字符串内容是否不同。-z判断字符串内容是否为空如果为空返回0表示真如果不为空返回1。
[ -z $String ]
echo $? # 返回结果为0因为没有定义过这个变量[ -z $USER ]
echo $? # 返回结果为1因为当前用户不为空判断当前系统是否支持中文。
[ $LANG zh_CN.UTF-8 ] echo 支持中文 || echo 不支持中文3. Shell流程控制语句
流程控制语句
ifthenelsefi
3.1 if 条件测试语句
3.1.1 if…
基本格式如下
if 条件测试语句
then 命令序列
fi 结束if语句例如判断home目录下是否存在test目录如果不存在则创建一个。
#!/bin/bash
DIR/home/test
if [ ! -e $DIR ]
thenmkdir -p $DIR
fi执行结果 3.1.2 if…else…
基本格式如下
if 条件测试语句
then 命令序列
else 命令序列
fi 结束if语句例如判断给定的IP是否正常
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 /dev/null
if [ $? -eq 0 ]
thenecho $1该IP是正常的
else echo $1该IP无法ping通
fi 说明/dev/null在 Linux/Unix 系统中“/dev/null” 是一个空设备文件它可以用于丢弃不需要的输出相当于一个黑洞。 执行结果 然后就可以完善一下脚本内容
#!/bin/bash
if [ -z $1 ]
thenecho 作者小薛echo 该命令检测服务器IP是否正常echo 直接在命令后面加参数IP就可以执行
elseping -c 3 -i 0.2 -W 3 $1 /dev/nullif [ $? -eq 0 ]thenecho $1该IP是正常的elseecho $1该IP无法ping通 fi
fi说明
“-c 3” 选项表示发送 3 个 ICMP 请求消息并等待每个请求的响应。“-i 0.2” 选项表示设置每个 ICMP 请求的时间间隔为 0.2 秒即每 200 毫秒发送一个请求。“-W 3” 选项表示设置等待响应的超时时间为 3 秒。 执行效果 3.1.3 if…elif…else
基本格式如下
if 条件测试语句1
then 命令序列1
elif 条件测试语句2
then 命令序列2
else 命令序列3
fi 结束if语句例如判断学员考试分数如何
#!/bin/bash
read -p 请输入分数1-100 fenshu
if [ $fenshu -ge 85 ] [ $fenshu -le 100 ];thenecho 该学生成绩为优秀
elif [ $fenshu -ge 70 ] [ $fenshu -le 84 ];thenecho 该学生成绩为合格
elseecho 该学生成绩为不合格
fi说明
“-p” 选项用于在用户输入之前显示一个提示信息。“read” 是一个 Bash 内置命令用于从标准输入中读取用户输入并将其赋值给一个变量。“fenshu” 是用于存储用户输入值的变量名。 执行效果如下 4. Shell脚本循环
4.1 for循环
基本格式
for 变量名 in 取值列表
do命令序列
done4.1.1 批量添加用户
创建一个用户名的txt文件 编写Shell脚本
#!/bin/bash
read -p 请输入密码 PASSWORD
for USERNAME in cat user.txt
do id $USERNAME /dev/nullif [ $? -eq 0 ]then echo $USERNAME用户已存在else useradd $USERNAME /dev/nullecho $PASSWORD | passwd --stdin $USERNAME /dev/nullecho $USERNAME用户创建成功fi
done说明
–stdin选项告诉passwd命令从标准输入stdin读取密码而不是要求用户手动输入密码。 执行结果如下 创建前 创建后
4.1.2 批量删除用户
编写Shell脚本
#!/bin/bash
for USERNAME in cat user.txt
doid $USERNAME /dev/nullif [ $? -eq 0 ]thenuserdel -r $USERNAME /dev/nullecho $USERNAME用户已删除elseecho $USERNAME用户不存在fi
done执行结果 4.1.3 批量ping IP 地址
创建一个IP地址的txt文件 编写Shell脚本
#!/bin/bash
HOSTLIST$(cat /root/iplist.txt)
for IP in $HOSTLIST
doping -c 3 -i 0.2 -W 3 $IP /dev/nullif [ $? -eq 0 ]then echo $IP该IP是正常的else echo $IP该IP无法ping通fi
done说明
“$()” 是 Bash 中的命令替换语法它表示将命令的输出结果作为一个整体嵌入到命令行中。 执行效果如下 4.1.4 检测同一局域网多台主机存活情况
方式一
#!/bin/bash
read -p 请输入网络位 NETWORK
for ((IP1;IP100;IP))
doping -c 3 -i 0.2 -W 3 $NETWORK.$IP /dev/nullif [ $? -eq 0 ]thenecho $NETWORK.$IP该IP可以ping通elseecho $NETWORK.$IP该IP无法ping通!!!!!!!fi
done执行结果 方式二
#!/bin/bash
read -p 请输入网络位 NETWORK
for IP in seq 1 254
doping -c 3 -i 0.2 -W 3 $NETWORK.$IP /dev/nullif [ $? -eq 0 ]thenecho $NETWORK.$IP该IP可以ping通elseecho $NETWORK.$IP该IP无法ping通!!!!!!!fi
done说明
“seq” 是一个用于生成序列的命令。“1” 是序列的起始值。“254” 是序列的结束值。
执行结果 4.2 while循环
基本格式如下
while 条件
do命令序列
done例如猜测商品价格
编写Shell脚本
#!/bin/bash
echo 该商品价格在0~1000之间输入价格来猜一猜
TIMES0
PRICE$(expr $RANDOM % 1000 )
while true
doread -p 请输入价格 INTlet TIMESif [ $INT -eq $PRICE ]then echo 恭喜您猜对了该商品的及格价格为$INTecho 您猜了$TIMES次exitelif [ $INT -gt $PRICE ];thenecho 您所输入的价格高了elseecho 您所输入的价格低了fi
done说明
$RANDOM是linux中的内置变量可以随机生成0-32767之间的整数数字。“expr” 是一个用于执行基本数学运算或字符串操作的命令。 执行结果 4.3 case条件测试语句
基本格式如下
case 变量值 in
模式1命令序列1
模式2 命令序列2
....默认命令序列
esac例如判断输入的是字母数字还是特殊符号
编写Shell脚本
#!/bin/bash
read -p 请输入一个字符 KEY
case $KEY in[a-z]|[A-Z])echo 这是字母;;[0-9])echo 这是数字;;*)echo 这是特殊符号
esac执行效果如下