当前位置:首页 > linux基础 > 正文内容

Shell介绍(三)if判断,case控制,for循环,while循环,流程控制语句

5年前 (2019-09-08)linux基础647
if判断


单分支

if [你有房]
then
    我就嫁给你
fi
多分支
if [ 你有房 ]
then
    我就嫁给你
else
    拜拜
fi
if [ 你有房 ]
then
    我就嫁给你
elif [ 你有钱 ]
then
    我也嫁给你
elif [ 你爸是李刚 ]
then
    我也嫁给你
elif [ 活好!运维技术好 ]
then
    我倒贴也嫁给你
else
    拜拜
fi
单分支  一个条件  一个结果
双分支  一个条件  两个结果
多分支  多个条件  多个结果


案例: 根据操作系统不同的版本安装不同的源

1. 如何取出版本号
2. 如何做版本号的比对
3. 比对完成执行相对应的安装源
[root@web scripts]# cat yum.sh 
#!/bin/sh
ve=`cat /etc/redhat-release |awk '{print $(NF-1)}'`
#centos6.x使用以上命令获取不到版本号
if [ ${ve%%.*} -eq 7 ]
then
    #判断网络是否通畅ping 如果不通 则重启systemctl restart network 通继续执行
    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    #测试wget是否已安装 无安装先安装wget
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
elif [ ${ve%%.*} -eq 6 ]
then
    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
fi
case 流程控制语句
case 变量名4 in
    模式匹配1)
        命令的集合
            ;;
    模式匹配2)
        命令的集合
            ;;
模式匹配3)
         命令的集合
            ;;
*)####*的下一行不需要有;;
echo USAGE[$0 1|2|3]
esac


案例:系统菜单

[root@web scripts]# cat menu.sh
#!/bin/sh
echo -e"\t\t#########################"
echo -e"\t\t#\t1.系统负载\t#"
echo -e"\t\t#\t2.磁盘使用率\t#"
echo -e"\t\t#\t3.内存使用率\t#"
echo -e"\t\t#\t4.当前登录用户\t#"
echo -e"\t\t#\t5.当前eth0的IP\t#"
echo -e"\t\t#\t6.显示菜单\t#"
echo -e"\t\t#########################"
menu(){
cat<<EOF
    1.u 系统负载
    2.d 磁盘使用率
    3.f 内存使用率
    4.w 当前登录用户
    5.ip 当前eth0的IP
    6.h 显示帮助(菜单)
    7.q 退出
EOF
}
menu
while true
do
read -p "请输入你想要查看的系统信息的编号: " num
case $num in
   1|u)
        uptime
        ;;
  
     2|d)
        df -h
        ;;
   3|f)
        free -h
        ;;
   4|w)
        w
       ;;
   5|ip)
       ip add
       ;;
   6|h)
        clear
        menu
        ;;
   7|q)
      exit
      ;;
   *)
        menu
esac
done


for循环

for 变量名 in [取值列表] 苹果 香蕉 梨 桃子 西瓜  字符串 数字{}序列  命令
do
  命令体
  echo 呵呵
done


案例: 使用for循环创建用户

[root@web scripts]# cat for1.sh
#!/bin/sh
for i in `cat user.txt`
do
    useradd $i
done


使用for循环 从1加到100  结果5050

for i in `seq 100`
do
    sum=$[sum+i]
done
echo $sum


while循环

while [ 条件表达式 ]
do
    命令
done


案例: 1加到100

#!/bin/sh
i=0
while [ $i -le 100 ]
do
    sum=$[i+sum]
    let i++
done
echo $sum


流程控制语句 exit continue break


exit   退出整个脚本 不会继续执行

break 跳出本次循环 继续往下执行 跳出循环体
continue 结束当前此次的命令,继续下一次循环
[root@web scripts]# cat exit.sh break.sh continue.sh 
#!/bin/sh
while true
do
    echo ok
    exit
    echo hehe
done
echo done......


#!/bin/sh
while true
do
    echo ok
    break 
    echo hehe
done
echo done......

#!/bin/sh
while true
do
    echo ok
    continue
    echo hehe
done
echo done......


案例2:

#!/bin/sh
for i in `seq 10`
do
    user=oldboy$i
    id $user &>/dev/null
    if [ $? -ne 0 ];then
       useradd $user
       [ $? -eq 0 ] && echo "$user create is ok"
    else
        break
    fi
done
echo hehe.......


#!/bin/sh
for i in `seq 10`
do
    user=oldboy$i
    id $user &>/dev/null
    if [ $? -ne 0 ];then
       useradd $user
       [ $? -eq 0 ] && echo "$user create is ok"
else
        continue
fi
done
echo hehe.......


“Shell介绍(三)if判断,case控制,for循环,while循环,流程控制语句” 的相关文章

Linux特殊权限

1.特殊权限概述权限有 r(读)、w(写)、 x(执行)这三种普通权限,在査询系统文件权限时会发现出现了一些其他权限字母,如:[root@qmf ~]# ll /usr/bin/passwd -rwsr-xr-x. 1 root ...

sersync实时同步

sersync实时同步

实时同步概述实时同步是一种只要当前目录发生变化则会触发一个事件,事件触发后会将变化的目录同步至远程服务器。保证数据的连续性, 减少人力维护成本,解决nfs单点故障实时同步工具选择sersync+rsync(√)、inotify+rsyncInotify是一个通知接口,用来监控文件系统的各种变化,如果...

Rsync文件同步

Rsync文件同步

Rsync基本概述rsync是一款开源、快速、多功能、可实现全量及增量的本地或远程数据同步备份的优秀工具。rsync软件适用于Unix/linux/Windows等多种操作系统平台。Rsync简介rsync英文称为remote synchronizetion,从软件的名称就可以看出来,rsync具有...

Shell介绍(一)变量、传参、数值运算

Shell编程1.什么情况下使用Shell1:安装CentOS系统 自动化安装操作系统(kickstart cobbler) 底层shell2:网络IP地址3:初始化操作系统(ntp时间同步,更改默认YUM源,SSH端口,SSH远程连接禁止DNS解析,禁止root登录,关闭seilnux,防火墙优化...

自动化运维(二)Ansible Playbook

自动化运维(二)Ansible Playbook

1.Playbook剧本1.playbook翻译过来就是“剧本”,那playbook组成如下play: 定义的是主机的角色task: 定义的是具体执行的任务playbook: 由一个或多个play组成,一个play可以包含多个task任务简单理解为: 使用不同的模块完成一件事情2.playbook的...

自动化运维(三)Ansible Playbook案例

自动化运维(三)Ansible Playbook案例

Playbook案例1.环境规划角色外网IP(NAT)内网IP(LAN)部署软件m01eth0:10.0.0.61eth1:172.16.1.61ansiblebackupeth0:10.0.0.41eth1:172.16.1.41rsyncnfseth0:10.0.0.31eth1:172.16....