3.Shell字符串对比
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.Shell字符串对比相关的知识,希望对你有一定的参考价值。
参考技术A 1.字符串比对,字符串必须使用双引号2.判断传参的参数是否为整数
例如:sh count.sh 10 10 要求判读是否传入两个参数 要求数字加判读是否为整数(禁止if)
10=10
3.案例:批量创建用户 批量创建10个用户 oldboy1 oldboy2 oldboy3...oldboy10
要求密码统一设置为123456
1.输入用户的前缀oldboy,判断如果为空 则退出
2.输入需要创建用户的个数 10,判断是否为整数
4.案例:判断当前10.0.0.0/24网络中 有哪些IP地址在线 ping通则在线
1.单分支
2.多分支
3.案例:输入两个数字 是否为整数 使用if方式
4.案例:根据操作系统不同的版本安装不同的源
1.如何取出版本号
2.如何做版本号的比对
3.比对完成执行相对应的安装源
5.案例:猜数字
生成一个随机数 1-100之间
RANDOM 随机数的范围 0-32767
取余
echo $((RANDOM%100+1))
用户输入一个数字
判断用户输入的数字如果相等则退出提示猜对了 大了 提示比随机数大 小了 提示 比随机数小
shell - 流程控制if
流程控制if 字符比较
1. [ "$a" == "$b"]
2. != 不等于
3. -z 字符串长度为零为真
4. -n 字符串长度不为空则为真 [ -n "$a" ]
5. str1>str2
# 多条件对比
a : and
o : or
[ 1 -lt 2 -a 5 -lt 10];echo $?
# 正则对比会使用 [[]]
&& 且
|| 或
[[ 1 -lt 5 || 5 -gt 10 ]];echo $?
例: 判断学生优劣
1-59 补考
60-80 及格
80-100 优秀
read -p "输入分数" grade
if [ $grade -lt 60 ];then
pass
elif [ $grade -ge 80 ];then
pass
elif [ $grade -ge 60 ];then
pass
else
pass
if [ $grade -gt 0 a $grade -lt 60];then
pass
# 正则匹配
[[ "$USER" =~ ^r ]]
判断变量是不是全都是数字
[[ "$num"=~ ^[0-9]+$ ]]
例: 批量创建用户, 输入创建用户的前缀以及后缀 aaa 123
read -p "前缀:" qz
read -p "后缀" hz
if [[ ! $qz=~^[a-z]+$ ]];then
if [[ #hz =~ ^[0-9]+$ ]];then
user = $qz$hz
id $user &>/dev/null
if [ $? -eq 0];then
echo "已存在"
例 : root 用户清空/var/log/message 日志,并每次执行保留最近100行
# 切换用户 su - octivia123
# $0 可以取到脚本的名字
#!/usr/bin/bash
# 判断root
if [ $USER == "root" ] && [ $UID -eq 0 ] ;then
# 文件必须存在
if [ -f /var/log/messages ];then
# 保留最近100行
tail -100 /var/log/messages > /var/log/messages/bak
cat /var/log/messages.bak > /var/log/messages
else
echo "file do not exist"
else
echo "do not have the right to execute file $0 "
fi
判断httpd服务是否正常启动,文件名必须是httpd_daemon.sh
# 手动判断服务是否正常
ps aux netstat -lntp lsof systemctl telnet namp
# ps aux|grep httpd|grep -v grep
#!/usr/bin/bash
# 判断服务是否正常启动
ssh_status=$(systemctl status sshd|awk '/^.*Active/ print $2')
ssh_status=$(systemctl status sshd|awk '/^.*Active/ print $2')
if [ "$ssh_status" == "active" ];then
echo "is active"
fi
# 判断端口是否存在
netstat -lntp|grep "sshd" &>/dev/null
if [ $? -eq 0 ];then
sleep 1
echo "is alive"
else
echo "is dead"
fi
# 判断进程是否存在
ps aux|grep sshd|grep -v|grep -v "pts"
if [ $? -eq 0 ];then
echo "exist"
else
echo "do not exist"
fi
根据不同的系统装yum 源
# cat /etc/redhat-release 可以查看系统版本
tt=$(awk 'print $(NF-1)' /etc/redhat-release)
echo $tt%%.*
#!/usr/bin/bash
tt=$(awk 'print $(NF-1)' /etc/redhat-release)
if [ $tt%%.* -eq "7" ];then
#配置仓库
mkdir -p /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
cat >/etc/yum.repos.d/base.repo<<-EOF
[base]
name=Local Base Yum Source
baseurl=ftp://192.168.56.1/base/7/x86_64
enable=1
gpgcheck=0
EOF
echo "7配好了"
elif [ $tt%%.* -eq "6" ];then
# 配置仓库
echo " 6配好了"
fi
安装不同版本的PHP
cat <<-EOF
1. Installed PHP 5.5
2. Installed PHP 6.6
3. Installed PHP 7.7
EOF
read -p " 请选择 [1|2|3|q]:" install
# 判断输入的必须是整数
if [[ ! $install =~ ^[1-4]$ ]];then
echo "输入错误"
exit
fi
if [ $install -eq 1 ];then
echo " php5.5"
elif [ $install -eq 2 ];then
echo "php6.6"
elif [ $install -eq 3 ];then
echo "php7.7"
elif [ $install == 'q' ];then
exit
fi
备份Mysql 中的所有数据库,每一个库一个.sql文件,排除没用的
# mysql -hlocalhost -uroot -p123 -e "show databases;"
排除一些库 _schema, test, mysql
|sed 1d|grep -v ".*_schema"
|sde 1d|grep -Ev ".*_schema|test|mysql"
拼接mysqldump 语句
|sed -r 's#(.*)#mysqldump -uroot -p -B \1 >1.sql#g'
# 方式二, 循环
#!/usr/bin/bash
dd=$(mysql -uroot -p -e "show databases;"|sed 1d|grep -Ev ".*_schema|test|mysql")
for i in $db
do
#用mysqldump
mysqldump -uroot -p -B $i > /backup/$i_$(date +%F).sql
done
以上是关于3.Shell字符串对比的主要内容,如果未能解决你的问题,请参考以下文章