【shell脚本速成】for 嵌套和和 if 高级用法

在这里插入图片描述

🌈你好呀!我是 山顶风景独好
🎈欢迎踏入我的博客世界,能与您在此邂逅,真是缘分使然!😊
🌸愿您在此停留的每一刻,都沐浴在轻松愉悦的氛围中。
📖这里不仅有丰富的知识和趣味横生的内容等您来探索,更是一个自由交流的平台,期待您留下独特的思考与见解。🌟
🚀让我们一起踏上这段探索与成长的旅程,携手挖掘更多可能,共同进步!💪✨

一、for嵌套

1.1、for嵌套if

案例:
输出1-9,当输出5时停止输出

案例代码

#!/bin/bash
# 
#Author: www.zutuanxue.com
#Created Time: 
#Release: 
#Description:输出1-9,当输出5时停止输出

for ((num=1;num<10;num++))
   do
     echo $num
     [ $num -eq 5 ]&& break
done

1.2、for嵌套for
案例:
打印99乘法表

案例代码

#!/bin/bash
# 
#Author: www.zutuanxue.com
#Created Time: 
#Release: 
#Description: 
#打印99乘法表,思考A*B的关系
for ((A=1;A<=9;A++))
  do
     for ((B=1;B<=$A;B++))
        do
           echo -n -e "$B*$A=$((A*B)) \t"
     done
     #换行
     echo 
done

二、for与数组

for循环与数组

2.1、使用for循环遍历读出数组

name=('tom' 'jarry' 'harry' 'barry')
for i in 0 1 2 3
  do
      echo ${name[$i]}
 done

2.2、使用for循环进行数组存值

for i in `seq 0 9`
  do
     read -p "name: " name[$i]
 done
 echo ${name[@]}

三、if高级用法

3.1、条件符号使用双圆括号,可以在条件中植入数学表达式 if (())

#!/bin/bash
#Author: www.zutuanxue.com
#Created Time:
#Script Description: 

if (( (5+5-5)*5/5 > 10 ))
    then
        echo "yes"
else
        echo "no"
fi

3.2、使用双方括号,可以在条件中使用通配符

通过代码看下 ,为字符串提供高级功能,模式匹配 r* 匹配r开头的字符串

#!/bin/bash
#Author: www.zutuanxue.com
#Created Time: 
#Script Description: 
for var in  ab ac rx bx rvv vt
   do
       if [[ "$var" == r* ]]
	  then
		echo "$var"
       fi
done

四、简写if

省去了关键字,条件为真采用&&符号链接命令块,条件为假采用||链接命令块

简写if一般用在简单的判断中

if [ ! -d /tmp/baism ]
    then
        mkdir /tmp/baism
fi

可以简写为

[ ! -d /tmp/baism ] && mkdir /tmp/baism

if [ $USER == 'root' ]
	  then
	      echo "hello root"
else
			  echo "hello guest"
fi

可以简写
[ $USER == 'root' ]&&echo "hello root" || echo "hello guest"

if是一个条件判断语句,判断的前提是得有个条件。
接下来我给大家演示一下如何在if条件中植入shell运算条件

五、与文件存在与否的判断

-e	是否存在   不管是文件还是目录,只要存在,条件就成立
-f	是否为普通文件
-d	是否为目录
-S	socket
-p	pipe
-c	character
-b	block
-L	软link
  • 文件权限相关的判断
-r	当前用户对其是否可读
-w	当前用户对其是否可写
-x	当前用户对其是否可执行
-u	是否有suid
-g	是否sgid
-k	是否有t位
  • 两个文件的比较判断
file1 -nt  file2	比较file1是否比file2新	
file1 -ot  file2 	比较file1是否比file2旧
file1 -ef  file2	比较是否为同一个文件,或者用于判断硬连接,是否指向同一个inode
  • 整数之间的判断
-eq	相等
-ne	不等
-gt	大于
-lt	小于
-ge   大于等于
-le	小于等于


浮点比较运算
比较两个浮点数字的大小
给脚本两个浮点数字   返回他两的关系


#思路
1、获得两个浮点数字
2、处理为整形
3、比较
4、输出
  • 字符串之间的判断
-z  是否为空字符串   		字符串长度为0,就成立
-n  是否为非空字符串    	只要字符串非空,就是成立
string1 == string2 		是否相等
string1 != string2 		不等


#用户登录验证

[root@zutuanxue ~]# cat if-6.sh 
#!/bin/bash
#1、交互式输入用户名 密码
read -p "user: " myuser
if [ -z "$myuser" ];then
	echo "用户名为空"
	exit 1
fi

#从外往里写
read -p "password: " mypw
if [ -n "$mypw" ];then
       #2、判断是否正确
         #2.1 判断用户名
	if [ $myuser == "root" ];then
	   #2.2判断密码
	   if [ $mypw == "abc-123" ];then
		   echo "welcome root"
	   else
		   echo "密码错误"
		   exit 1
	   fi
        
 	else
     	 echo "用户名错误"
		exit 1
	fi		

else
	echo "密码不能为空"
	exit 1
fi
  • 多重条件判断
逻辑判断符号:
&&  	(and 逻辑与) 		两个条件同时满足,整个大条件为真
||	(or 逻辑或)		两个条件满足任意一个,整个大条件为真
! 	非运算

#用户登录验证
[root@zutuanxue ~]# cat if-6.sh 
#!/bin/bash
#1、交互式输入用户名 密码
read -p "user: " myuser
if [ -z "$myuser" ];then
	echo "用户名为空"
	exit 1
fi

#从外往里写
read -p "password: " mypw
if [ -n "$mypw" ];then
       #2、判断是否正确
         #2.1 判断用户名
	#if [ $myuser == "root" ];then
	   #2.2判断密码
	  # if [ $mypw == "abc-123" ];then
	#	   echo "welcome root"
	   #else
	#	   echo "密码错误"
	#	   exit 1
	#   fi
        #
 	#else
     	#	echo "用户名错误"
	#	exit 1
	#fi		

	if [ $myuser == 'root' ] && [ $mypw == 'abc-123' ];then
		echo "welcome root"
	else
		echo "用户名或密码错误"
		exit 1
	fi

else
	echo "密码不能为空"
	exit 1
fi

六、课后练习

练习题1、判断/tmp/tyschool目录,如果没有则创建它
练习题2、判断是否有/usr/bin/wget命令,没有则安装他
练习题3、判断当前用户是否为管理员,UID为0或者为root都算管理员
练习题4、打印物理内存使用率

✨ 这就是今天要分享给大家的全部内容了,我们下期再见!😊
🏠 我在CSDN等你哦!我的主页😍

  • 21
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值