首页 > 系统相关 >Shell编程 - 判断篇

Shell编程 - 判断篇

时间:2024-12-01 14:54:20浏览次数:7  
标签:Shell 编程 echo thing 判断 awk ls print true

1. 字符串比较符

运算符 描述 示例
== 等于 [ "a" == "a" ]为true
!= 不等于 [ "a" != "a" ]为false
> 大于,判断字符串时根据ASCII码表顺序,不常用 在[]表达式中:[ 2 > 1 ]为true 在[[]]表达式中:[[ 2 > 1 ]]为true 在(())表达式中:(( 3 > 2 ))为true
< 小于,判断字符串时根据ASCII码表顺序,不常用 在[]表达式中:[ 2 < 1 ]为false 在[[]]表达式中:[[ 2 < 1 ]]为false 在(())表达式中:(( 3 < 2 ))为false
>= 大于等于 在(())表达式中:(( 3 >= 2 ))为true
<= 小于等于 在(())表达式中:(( 3 <= 2 ))为false
-n 字符串长度不等于0为真 VAR1=1;VAR2="" [ -n "$VAR1" ]为true [ -n "$VAR2" ]为false
-z ⭐ 字符串长度等于0为真 VAR1=1;VAR2="" [ -z "$VAR1" ]为false [ -z "$VAR2" ]为true
str 字符串存在为真 VAR1=1;VAR2="" [ $VAR1 ]为true [ $VAR2 ]为false

需要注意的是,使用-z或-n判断字符串长度时,变量要加双引号。⭐

# 加了双引号才能正常判断是否为空
# [ -z "$a" ] && echo yes || echo no
yes
# [ -n "$a" ] && echo yes || echo no
no
# 使用了双中括号就不用了双引号
# [[ -n $a ]] && echo yes || echo no
no
# [[ -z $a ]] && echo yes || echo no
yes

2. 文件测试

测试符 描述 示例
-e 文件或目录存在为真 [ -e path ] path存在为true
-f 文件存在为真 [ -f file_path ] 文件存在为true
-d 目录存在为真 [ -d dir_path ] 目录存在为true
-r 有读权限为真 [ -r file_path ] file_path有读权限为true
-w 有写权限为真 [ -w file_path ] file_path有写权限为true
-x 有执行权限为真 [ -x file_path ] file_path有执行权限为true
-s 文件存在并且大小大于0为真 [ -s file_path ] file_path存在并且大小大于0为true

案例1. 检查指定的文件(目录,软链接)脚本,如果文件存在则显示文件名字,大小,权限,硬链接数,所属用户和用户组,文件修改时间。如果文件不存在则输出文件不存在。⭐⭐⭐

#1.vars
thing=$1
#2.判断参数
if [ $# -eq 0 ];then
	echo "HELP:$0 + 参数"
	exit
fi

#3.判断
  #目录
if [ -d $thing ];then
	echo "$thing is a dir"
        echo "目录大小:`du -sh $thing|awk '{print $1}'`"
        echo "目录权限:`ls -ld $thing|awk '{print $1}'|sed -r 's#^.##g'`/`stat $thing|awk -F '[(/]' 'NR==4{print $2}'`"
        echo "硬链接数:`ls -ld $thing|awk '{print $2}'`"
        echo "所属用户:`ls -ld $thing|awk '{print $3}'`"
        echo "所属用户组:`ls -ld $thing|awk '{print $4}'`"
        echo "修改时间:`ls -ld $thing|awk '{print $6,$7,$8}'`"
	exit 
fi

#软链接
  [ -L $thing ] && {
     echo $thing is a soft_link
        echo "文件大小:`ls -l $thing|awk '{print $5}'`"
        echo "权限:`ls -l $thing|awk '{print $1}'|sed -r 's#^.##g'`/`stat $thing|awk -F '[(
/]' 'NR==4{print $2}'`"
        echo "硬链接数:`ls -l $thing|awk '{print $2}'`"
        echo "所属用户:`ls -l $thing|awk '{print $3}'`"
        echo "所属用户组:`ls -l $thing|awk '{print $4}'`"
        echo "修改时间:`ls -l $thing|awk '{print $6,$7,$8}'`"
     exit 0
       }


  #文件
if [ -f $thing ];then
  echo "$thing is a file"
	if [ -x $thing ];then
		echo "该文件有执行权限"
	else
		echo "该文件没有执行权限"
	fi
	echo "文件大小:`ls -l $thing|awk '{print $5}'`"
        echo "权限:`ls -l $thing|awk '{print $1}'|sed -r 's#^.##g'`/`stat $thing|awk -F '[(
/]' 'NR==4{print $2}'`"
        echo "硬链接数:`ls -l $thing|awk '{print $2}'`"
        echo "所属用户:`ls -l $thing|awk '{print $3}'`"
        echo "所属用户组:`ls -l $thing|awk '{print $4}'`"
        echo "修改时间:`ls -l $thing|awk '{print $6,$7,$8}'`"

else
	echo "$thing dose not exist"
fi

3. 布尔运算符

运算符 描述 示例
! 非关系,条件结果取反 [ ! 1 -eq 2 ]为true
-a 和关系,在[]表达式中使用 [ 1 -eq 1 -a 2 -eq 2 ]为true
-o 或关系,在[]表达式中使用 [ 1 -eq 1 -o 2 -eq 1 ]为true

4. 逻辑判断符

判断符 描述 示例
&& 逻辑和,在[[]]和(())表达式中或判断表达式是否为真时使用 [[ 1 -eq 1 && 2 -eq 2 ]]为true (( 1 == 1 && 2 == 2 ))为true [ 1 -eq 1 ] && echo yes 如果&&前面表达式为true则执行后面的
|| 逻辑或,在[[]]和(())表达式中或判断表达式是否为真时使用 [[ 1 -eq 1 || 2 -eq 1 ]]为true (( 1 == 1 || 2 == 2 ))为true [ 1 -eq 2 ] || echo yes 如果||前面表达式为false则执行后面的

标签:Shell,编程,echo,thing,判断,awk,ls,print,true
From: https://www.cnblogs.com/kyle-7Qc/p/18579793

相关文章

  • 学霸带你游戏化 Bash 数组提升编程效率
    数组在Bash脚本中的重要性在现代编程中,数组的灵活性和高效性使其成为处理数据的核心工具之一。尤其是在Bash脚本中,数组能够帮助开发者以简洁的方式管理和操作多个数据项。在游戏开发、系统管理等领域,数组的应用无处不在。从定义和初始化,到元素访问和操作,每一个环节都至关......
  • C++编程:通过简单实现理解CyberRT的DataVisitor和DataDispatcher
    文章目录0.引言1.定义DataVisitor接口2.实现DataDispatcher3.创建具体的DataVisitor4.类关系图5.测试示例6.编译和运行0.引言本文简单实现类似CyberRT的DataVisitor和DataDispatcher,使得数据能够被分发给多个订阅者(访客)。1.定义DataVisitor接......
  • shell编程7,bash解释器的 for循环+while循环
    声明!学习视频来自B站up主泷羽sec有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页B站泷......
  • C语言编程1.19男生女生
    题目描述给定一个班每个同学的性别,分别输出男女比例,男生学号和女生学号。输入格式第一行一个整数n,0<n≤500表示班级人数。第二行中有n个0(女生)或者1(男生),表示按学号(从1号开始)顺序的每个同学性别。输出格式第一行输出男生与女生的比例,形式为1:?。如果男女生相等,则输出1:1;如果......
  • C语言编程1.18票数统计
    题目描述《造星花园》青春偶像派电视剧热播后,剧组各位明星来到有“娱乐热土”之称的湖海卫视参加“我选我喜欢”的与观众现场互动娱乐节目。现场的观众对明星们投票选出最受欢迎的明星。投票的方式是:每个观众只能投一票,观众喜欢某个明星或觉得他(她)表现不错,就可以到台上将一支......
  • c语言编程1.17蓝桥杯历届试题-回文数字
    题目描述观察数字:12321,123321都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。本题要求你找到一些5位或6位的十进制数字。满足如下要求:该数字的各个数位之和等于输入的整数。输入格式一个正整数n(10<n<100),表示要求满足的数......
  • 判断一个自然数是否为完全数(Java)
    importjava.util.Scanner;publicclass完全数{publicstaticvoidmain(String[]args){//输入一个自然数,判断是不是完全数//完全数:所有因子之和等于该数本身Scannersc=newScanner(System.in);System.out.println("请输......
  • 泷羽sec-shell(6)if条件判断与for循环结构 学习笔记
     声明!学习视频来自B站up主**泷羽sec**有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页[B......
  • 终结选择困难,Xshell、MobaXterm、PuTTY、SecureCRT 多款 SSH 终端软件该怎么选
     文章目录软件选取原则对比表各软件优势曝光的安全事件总结其他同类软件 软件选取原则windows下可用于ssh连接的终端软件有很多,本人会根据以下几个原则来进行对比选择:简单好用。无需过多设置,即可达到好用状态,最好支持中文和绿色版。功能强大。最好能一......
  • 举例说明html5怎么判断网络状态?
    HTML5提供了navigator.onLineAPI来判断网络状态。它是一个布尔值属性,当浏览器在线时返回true,离线时返回false。然而,它有一些局限性,仅仅检测浏览器是否连接到网络,并不一定意味着网络连接有效或可以访问互联网。例如,连接到本地网络但无法访问互联网时,它仍然返回true。为了......