首页 > 系统相关 >Shell脚本流程控制(Linux篇)

Shell脚本流程控制(Linux篇)

时间:2024-09-07 13:49:30浏览次数:10  
标签:Shell no 流程 echo num zking Linux txt root

1.流程控制

流程控制是改变程序运行顺序的指令。

1.1.条件判断

1.1.1.文件类型判断

参数说明
-d判断指定的目录是否存在
-e判断文件是否存在,存在即为真
-f判断普通文件是否存在
-L判断文件是否存在且为连接文件

示例一:

# 判断文件是否存在,存在为0,不存在为1
root@zking:~# test -e a.txt 
root@zking:~# echo $?
0
root@zking:~# test -d a.txt 
root@zking:~# echo $?
1
root@zking:~# test -f b.txt
root@zking:~# echo $?
1
​
# 除了test以外,还可以使用中括号,但是需要注意括号里条件前后必须要用空格
root@zking:~# [-e b.txt]
[-e: command not found
root@zking:~# [ -e b.txt] 
bash: [: missing `]'
root@zking:~# [ -e b.txt ]
root@zking:~# echo $?
1
​
root@zking:~# [ -d /home ] && echo "is directory" || echo "is not directory"
is directory
root@zking:~# [ -f b.txt ] && echo "file" || echo "no file"
no file
root@zking:~# [ -f a.txt ] && echo "file" || echo "no file"
file

1.1.2.文件权限判断

参数说明
-r判断文件是否存在且有读权限
-w判断文件是否存在且有写权限
-x判断文件是否存在且有执行权限,注意:拥有者,所属组,其他人只用有一个有指定权限就算有
-u会返回真,上面的参数也一样 判断文件是否存在且有SUID权限
-g判断文件是否存在且有SGID权限
-k判断文件是否存在且有SBIT权限

示例一:

# 判断a.txt文件是否具备读的权限
root@zking:~# [ -r a.txt ] && echo "yes" || echo "no"
yes
# 判断a.txt文件是否具备写的权限
root@zking:~# [ -x a.txt ] && echo "yes" || echo "no"
no
# 判断paramdemo.sh是否具备执行的权限
root@zking:~# [ -x paramdemo.sh ] && echo "yes" || echo "no"
yes

1.1.3.两个文件的判断

参数说明
file1 -nt file2file1的最后修改时间是否比file2新,是在返回真
file1 -ot file2file1的最后修改时间是否比file2旧,是在返回真
file1 -ef file2file1inode号是否与file2的一致,即是否为同一个文件

示例一:

root@zking:~# touch b.txt
root@zking:~# ls
a.txt  paramdemo02.sh  person.txt   snap
b.txt  paramdemo.sh    readdemo.sh  workspace
# 判断a.txt的最后修改时间是否比b.txt新
root@zking:~# [ a.txt -nt b.txt  ] && echo "yes" || echo "no"
no

1.1.4.整数比较

参数说明
num1 -eq num2==
num1 -ne num2!=
num1 -gt num2>
num1 -lt num2<
num1 -ge num2>=
num1 -le num2<=

示例一:

root@zking:~# [ 1 > 2 ] && echo "yes" || echo "no"
yes
root@zking:~# [ 1 -gt 2 ] && echo "yes" || echo "no"
no

1.1.5.字符串判断

参数说明
-z str是否为空,为空返回真
-n str判断是否为非空,非空返回真
str1 == str2判断是否相等
str1 != str2判断是否不等

示例一:

root@zking:~# name=zs
root@zking:~# [ -z $name ] && echo "yes" || echo "no"
no
root@zking:~# [ -z $age ] && echo "yes" || echo "no"
yes
​
root@zking:~# [ "abc" == "abc" ] && echo "yes" || echo "no"
yes
root@zking:~# [ "abc" == "bdc" ] && echo "yes" || echo "no"
no

1.1.6.多重判断

参数说明
判断1 -a 判断2and
判断1 -o 判断2or
!判断

示例一:

root@zking:~# num=100
root@zking:~# [ -n $num -a $num -gt 200 ] && echo "yes" || echo "no"
no
root@zking:~# num=201
root@zking:~# [ -n $num -a $num -gt 200 ] && echo "yes" || echo "no"
yes

1.2.if语句

if语句格式如下:

if list; then list; [ elif list; then list; ] ... [ else list; ] fi

示例一:

#!/bin/bash
#author test
num=$1
if [ $num -gt 100 ];then
       echo ">100"
fi

示例二:监控磁盘占用率

#!/bin/bash
#author: zking
#description: 当sda1盘的占用达到90%即输出警告信息

# 针对变量初始化
declare -i rate=0
# 获取/dev/sda2的磁盘占用率
rate=$(df -h | grep "/dev/sda2" | awk '{print $5}' | cut -d "%" -f 1)
if [ $rate -ge 10 ];then
        echo "warning! /dev/sda1 is full"
fi

示例三:多if分支

#!/bin/bash
#author: zking
read -p "please input a num:" num
if [ $num -gt 10 -a $num -le 100 ];then
	echo "100>=num>10"
	exit 1
elif [ $num -gt 100 -a $num -le 1000 ]; then
	echo "1000>=num>100"
	exit 2
elif [ $num -gt 1000 -a $num -le 10000 ]; then
	echo "10000>=num>1000"
	exit 3
else
	echo "other num"
fi

1.3.case语句

if elif else语句一样都是属于分支语句,不同点在于,case只能判断一种条件关系,if可以判断多种条件关系。case语句语法格式如下:

case 模式名 in
	模式 1)
		命令
		;;
	模式 2)
		命令
		;;
	*)
		不符合以上模式执行的命令
esac

示例一:

#!/bin/bash
#author: zking
#discription: case
read -p "please input [y/n]:" -t 30 choose

case $choose in
        "y")
                echo "your input y..."
                ;;
        "n")
                echo "your input n..."
                ;;
        *)
                echo "your input is others..."
                ;;
esac

1.4.for语句

for语句命令格式如下:

for 变量名 in 取值列表; do
	命令
done

示例一:

#!/bin/bash
#author: zking
for i in 1 2 3 4 5 6 
do
        echo $i
done

#!/bin/bash
#author: zking
for ((i=0;i<=10;i++))
do
        echo $((i))
done


#!/bin/bash
#author: zking
for i in {1..9}
do
        echo $i
done

#!/bin/bash
#author: zking
list="hello shell world"
for str in $list
do
        echo $str
done

标签:Shell,no,流程,echo,num,zking,Linux,txt,root
From: https://blog.csdn.net/m0_67771087/article/details/141992693

相关文章

  • 【保姆级教程】使用 PyTorch 自定义卷积神经网络(CNN) 实现图像分类、训练验证、预测全
    《博主简介》小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。......
  • 【容器安全系列Ⅵ】- Linux seccomp隔离
        在本系列中,我们介绍了各种安全层,这些安全层不仅可以将容器与主机上的其他进程隔离开来,还可以将容器与其底层主机隔离开来。在这篇文章中,我们将讨论容器运行时如何将seccomp过滤器用作“最后一道防线”。Syscalls和seccomp概述    Seccomp过滤器是......
  • Linux系统安装ansiblle环境
    前言:这里是生产环境红帽系统,如果是别的系统,本地源的配置方法不一样。一、主节点服务器Redhat8配置使用阿里源:备份:sudo/etc/yum.repos.d/CentOS-Base.repo/opt/yum/下载新的CentOS-Base.repo到/etc/yum.repos.d/(这里用的CentOS8.0)命令:sudowget-O/etc/yum.repos.d/red......
  • linux中vim实用冷门命令大全
    感谢浪浪云支持发布浪浪云活动链接:https://langlangy.cn/?i8afa52文章目录1.快速保存和退出2.局部替换替换当前行中的文本替换当前行中的所有匹配替换整个文件中的内容确认替换3.高效删除和复制删除命令复制命令粘贴命令4.快速移动行内移动屏幕内移动文件内移......
  • ffmpeg(各个系统版本安装- Windows11-Mac-Linux)
    各个系统上的安装不建议使用编译安装,大佬的话可以编译安装会各种环境问题,直接使用别人安装好的就行1.Windows11上安装ffmpeg1.官网下载ffmpeg进入DownloadFFmpeg网址,点击下载windows版ffmpeg,使用别人编译好的版本即可在releasebuilds里面选择一个版本(使用release......
  • linux mysql忘记root密码了
    动一下小手点一下赞。谢谢!你的赞就是我更新的动力。在使用Linux系统和MySQL数据库时,有时候会遇到一个比较棘手的问题,那就是忘记了root密码。当忘记了root密码后,用户就无法再进行数据库操作,这对于系统和数据的安全造成了一定的影响。但是,不必担心,因为有一些方法可以帮助你重置MySQL......
  • linux之shell
    Shell编程shell简介shell的作用1.解释执行用户输入的程序或者指令2.用户输入一条指令,shell解释一条3.键盘输入指令,Linux给与响应-----这个过程称之为交互式响应流程shell是一块包裹着系统核心的壳,处于操作系统的最外层,与用户直接对话,shell可以把用户的输入,解释......
  • 行政组织理论-第十二章:政府再造流程
    章节章节汇总第一章:绪论第二章:行政组织的演变第三章:科层制行政组织理论第四章:人本主义组织理论第五章:网络型组织理论第六章:行政组织目标第七章:行政组织结构第八章:行政组织体制第九章:行政组织设置与自身管理第十章:组织激励第十一章:创建学习型组织第十二章:政府再造流程第十三......
  • Linux 性能优化(网络、磁盘、内存、日志监控)
    1、CPU性能监控1.2、平均负载基础平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和CPU使用率并没有直接关系。平均负载其实就是平均活跃进程数。平均活跃进程数,直观上的理解就是单位时间内的活跃进程数。查看cpu个数:grep'modelnam......
  • mysql在linux安装
    在Linux上安装MySQL5.7版本的步骤可以分为多个部分,包括下载、安装、配置以及启动MySQL服务。以下是一个详细的步骤指南:一、下载MySQL5.7安装包访问MySQL官方网站:前往MySQL官方网站下载适用于Linux的MySQL5.7安装包。通常,你会找到如mysql-5.7.xx-linux-glibc2.xx-x86_64.tar.......