【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
  • 文件权限相关的判断
l 复制代码
-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

  • 多重条件判断

shell 复制代码
逻辑判断符号:
&&  	(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等你哦!我的主页😍

相关推荐
奔跑的花短裤6 小时前
少儿编程启蒙学习
学习·青少年编程·机器人·ai编程
程序leo源2 天前
C语言:文件操作2(又一万字?)
android·java·c语言·开发语言·javascript·c++·青少年编程
Trouvaille ~2 天前
【优选算法篇】微位至简,数之恢宏——解构 C++ 位运算中的理与美
开发语言·c++·算法·青少年编程·面试·蓝桥杯·位运算
GG.WinGel3 天前
案例: 三次锁定(上)
开发语言·数据库·sql·青少年编程·.net
明月看潮生4 天前
青少年编程与数学 02-003 Go语言网络编程 19课题、Go语言Restful编程
开发语言·青少年编程·golang·网络编程·编程与数学
海阔天空_20134 天前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化
明月看潮生5 天前
青少年编程与数学 02-003 Go语言网络编程 09课题、Cookie
青少年编程·golang·网络编程·编程与数学
明月看潮生5 天前
青少年编程与数学 02-003 Go语言网络编程 15课题、Go语言URL编程
开发语言·网络·青少年编程·golang·编程与数学
明月看潮生5 天前
青少年编程与数学 02-003 Go语言网络编程 14课题、Go语言Udp编程
青少年编程·golang·网络编程·编程与数学
安祝老师6 天前
十四届蓝桥杯STEMA考试Python真题试卷第二套第二题
开发语言·python·算法·青少年编程·蓝桥杯