shell中的if判断、while循环、for循环引论

一 流程控制之if判断

1、什么是if判断
依据条件的真假来决定是否做事

2、为何要有if判断
为了让计算机能够像人一样去做判断

3、如何用(格式)

if 条件1;then

    代码1

	代码2

	代码3

elif 条件2;then

    代码1

	代码2

	代码3

elif 条件3;then

    代码1

	代码2

	代码3

.......

else

    代码1

	代码2

	代码3

fi

案例1 #根据用户输入的年龄返回结果

#!/bin/bash

echo "start......"
read -p "请输入您的年龄: " age

if [ $age -eq 18 ];then
	echo "too young"
else
	echo "too old"
fi
echo "end......"

案例2:根据用户输入的成绩返回结果(类似例1)

#!/bin/bash

read -p "请输入您的分数: " score

if [ $score -ge 90 ];then
    echo "优秀"
elif [ $score -ge 80 ];then
    echo "良好"
elif [ $score -ge 70 ];then
    echo "一般" 
else
	echo "很差"
fi
案例3:做一个登录系统
#!/bin/bash

read -p "输入用户名:" inp_user
read -p "输入密码:" inp_pwd

if [ $inp_user = "egon" ] && [ $inp_pwd = "123" ];then
	echo "登录成功"
else
	echo "用户名或者密码错误"
fi

二 流程控制之while循环

1、什么是循环
循环就是让计算机重复的做某件事
2、为何要用循环
因为在某些特定的情况下、我们需要计算机重复的做某件事,所以就用到了循环
3、如何用循环(用法)

#多行
while 条件
do
	命令1
	命令2
	命令3
done

#一行
while 条件;do 命令1;命令2;命令3; done

while true;do ifconfig eth0;sleep 0.5;clear; done 

例1、写一个登录功能,若用户名密码不正确,重新输入,直到成功为止

#!/bin/bash

while true
do
    read -p "输入用户名:" inp_user
    read -p "输入密码:" inp_pwd

    if [ $inp_user = "egon" ] && [ $inp_pwd = "123" ];then
        echo "登录成功"
        break
    else
        echo "用户名或者密码错误"
    fi
done

三、for循环

案例1输出三遍ok

for i in {
     1..3}
do
    echo ok $i
done

案例2判断1.1.1.{2-254}那些ip地址没有被占用(ping通的可能被占用了)

#!/bin/bash

for i in {
     2..254}
do
	(
    ping -c1 1.1.1.$i &>/dev/null
    if [ $? -eq 0 ];then
        echo "1.1.1.$i ok"
    else
    	echo "1.1.1.$i down"
    fi
    ) &
done

作业:将test目录下以txt为后缀的文件改为以log结尾

[root@web02 test]# cat xiugai.sh 
#!/bin/bash
cd /root/test
rename txt log *

方法二:
[root@web02 test]# cat xiugai2.sh 

for name in `ls *.log`
do
    mv $name ${name%.log}.txt
done


方法三:
for i in `ls /root/test`
do
mv $i `ls $i | cut -d "." -f1`.log
done

最终版:
[root@web02 test]# cat xiugai3.sh 
#!/bin/bash
for i in `ls /root/test`
do 
    if [ `ls $i | cut -d "." -f2` = log ];then
	
        mv $i `ls $i | cut -d "." -f1`.txt
    elif [ `ls $i | cut -d "." -f2` = txt ];then
	
        mv $i `ls $i | cut -d "." -f1`.log
    fi
done

你可能感兴趣的:(shell编程)