收藏文章 楼主

shell if 条件判断文件或目录;字符串长度或为空,逻辑运算

版块:shell   类型:普通   作者:小绿叶技术博客   查看:1717   回复:0   获赞:0   时间:2020-10-15 11:22:43

#!/bin/bash

a=10

b=20


val=`expr $a + $b` # 将 + 符号换成: 减-    乘 \* 除 /  取余 %

echo "a +b = $val" # 响应一个字符串, 和变量的值 $val


if [ $a == $b ] # if 如果,then 然后, echo 响应,fi 结束字句

then  # [ $a == $b ]  用绝对等于符号判断两个字符串

        echo "a 等于 b "

fi


---------  逻辑运算符号符合条件就返回true  ------------

#相等 -eq    不相等 -ne     大于  -gt     大等于  -ge     小于  -lt       小等于  -le


# 非运算 !     或运算 -o 与运算 -a

[ $a != $b ] # 变量:a 不等于 b, 非运算

[ $a -lt 60 -a  $b -gt 15] # 变量:a <60   且  b>15 与运算

[ $a -lt 100 -o $b -gt 100 ] # 变量:a<100  或  b> 100 或运算


&& # 相当于与运算,满足所有条件;也用于前面成功完成才执行后面 

|| # 相当于或运算,满足一个条件就可以;前面无论成功失败就执行后面


= 字符串是否相等; != 判断是否不相等; -z 字符串长度为0;

-n  字符串长度不相等; $ 字符串为空




#------------- 案例 -----------#

### 打印字符串长度 

a="123456789" ; echo ${a: 3: 4-2}   # echo ${ }  是计算函数,所以:4-2 等于2   如果为负数是倒数,需要添加空格指定

                                                         # 截取第3个字符后面的2个字符(不包含第3)

echo ${#a}                                        # 打印字符串长度




setprofile=$(cat /etc/profile | grep eisccnjdk)

# 定义变量为:查看文件过滤字段的行的内容

if [ ${#setprofile} -lt 9  ] # ${#}  符号标识字符串长度

then

echo "变量$setprofile 的长度小于9"


else

echo "变量不小于9"

fi




################################################################################

#!/bin/bash

aa="/root/d"  # 定义变量为一个目录

for bb in $aa/* ; do # 将 aa 的值赋给     bb 继承

if [ -d $bb ]; then # if 判断 $bb 变量是目录,然后就:

# -d 目录

  rm -rf $bb # 删除一个目录下所有的文件

fi # fi 结束

done


#!/bin/bash

direc="/root/d" # 定义direc变量 的值为目录


for dir2del in $direc/* ; do

# dir2del in 是 变量$direc 的值

if [ -d $dir2del ]; then # 判断 $dir2del 是目录,然后就

  rm -rf $dir2del # 清空文件夹

fi

done



#!/bin/sh

cat "/root/1.txt" | while read line; do

# 查看文件内容,并将它赋值给变量 line

echo $line; # 以系统默认编码来打印

done


读取文件属性

     if elif else

用来判断文件的参数:

-r 可读    -b块设备文件    -c 字符设备    -d 目录    -f 普通文件    -g SGID位    -k站着位stick bit 

-p 管道    -u SUID  -r 可读          -w 可写 -x 执行 -s 文件为空 -e 文件存在   



shell中条件判断if中的-z到-d的意思

[ -a FILE ] 如果 FILE 存在则为真。

[ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。

[ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真。

[ -d FILE ] 如果 FILE 存在且是一个目录则为真。

[ -e FILE ] 如果 FILE 存在则为真。

[ -f FILE ] 如果 FILE 存在且是一个普通文件则为真。

[ -g FILE ] 如果 FILE 存在且已经设置了SGID则为真。

[ -h FILE ] 如果 FILE 存在且是一个符号连接则为真。

[ -k FILE ] 如果 FILE 存在且已经设置了粘制位则为真。

[ -p FILE ] 如果 FILE 存在且是一个名字管道(F如果O)则为真。

[ -r FILE ] 如果 FILE 存在且是可读的则为真。

[ -s FILE ] 如果 FILE 存在且大小不为0则为真。  

[ -t FD ] 如果文件描述符 FD 打开且指向一个终端则为真。

[ -u FILE ] 如果 FILE 存在且设置了SUID (set user ID)则为真。

[ -w FILE ] 如果 FILE 如果 FILE 存在且是可写的则为真。

[ -x FILE ] 如果 FILE 存在且是可执行的则为真。

[ -O FILE ] 如果 FILE 存在且属有效用户ID则为真。

[ -G FILE ] 如果 FILE 存在且属有效用户组则为真。

[ -L FILE ] 如果 FILE 存在且是一个符号连接则为真。  

[ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was last read则为真。

[ -S FILE ] 如果 FILE 存在且是一个套接字则为真。  

[ FILE1 -nt FILE2 ] 如果 FILE1 has been changed more recently than FILE2,or 如果 FILE1 exists and FILE2 does not则为真。  

[ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在则为真。  

[ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的设备和节点号则为真。

[ -o OPTIONNAME ] 如果 shell选项 “OPTIONNAME” 开启则为真。

[ -z STRING ] “STRING” 的长度为零则为真。  

[ -n STRING ] or [ STRING ] “STRING” 的长度为非零 non-zero则为真。


[ ARG1 OP ARG2 ] “OP” is one of -eq, -ne, -lt, -le, -gt or -ge. These arithmetic binary operators return true if “ARG1” is equal to, not equal to, less than, less than or equal to, greater than, or greater than or equal to “ARG2”, respectively. “ARG1” and “ARG2” are integers.



数字判断

[ $count -gt "1"] 如果$count 大于1 为真

-gt  大于

-lt    小于

-ne  不等于

-eq  等于

-ge  大于等于

-le  小于等于


[ STRING1 == STRING2 ] 如果2个字符串相同。 “=” may be used instead of “==” for strict POSIX compliance则为真。  

[ STRING1 != STRING2 ] 如果字符串不相等则为真。  

[ STRING1 < STRING2 ] 如果 “STRING1” sorts before “STRING2” lexicographically in the current locale则为真。  

[ STRING1 > STRING2 ] 如果 “STRING1” sorts after “STRING2” lexicographically in the current locale则为真。  









逻辑判断: 

相等 -eq    不相等 -ne     大于  -gt     大等于  -ge     小于  -lt       小等于  -le

非运算 !     或运算 -o 与运算 -a


#!/bin/bash

#file=${file:?'必须给出参数'}

file=1.sh # 给变量赋值为一个文件

file=$file # 将参字符串赋值给变量

if [ ! -e $file ]; then # 判断 ! -e 不存在文件,然后就

    echo "$file 不存在" # 打印字符串

    exit 1 # 文件不存在就退出程序,不向下执行

fi # if 和 fi  开始与结束


if [ -d $file ]; then # 判断变量$file    -d 是文件夹,然后就

    echo "$file 是一个目录" # 打印字符串

    if [ -x $file ]; then # 判断变量 -x 执行,然后就

        echo "可以"

    else

        echo "不可以"

    fi


    echo "对此进行搜索"   # echo 打印变量

elif [ -f $file ]; then # 循环语句 if elif else

# -f 是普通文件,然后就  

    echo "$file 是一个正规文件"

else # else 其他的情况

    echo "$file不是一个正规文件"

fi



if [ -O $file ]; then #  -O 用户组

    echo "你是$file的拥有者"

else

    echo "你不是$file的拥有者"

fi


if [ -r $file ]; then # -r 可读

    echo "你对$file拥有"

else

    echo "你并不对$file拥有"

fi

echo "可读权限" # 连接打印:上一条和本条信息顺序连在一起了



if [ -w $file ]; then # -w 可读

    echo "你对$file拥有"

else

    echo "你并不对$file拥有"

fi

echo "可写权限"



if [ -x $file -a ! -d $file ]; then # -x 可执行

    echo "你拥有对$file"

else

    echo "你并不拥有对$file"

fi

echo "可执行的权限"





提供企业建站服务,免费网防系统,提交信息登录 http://yundun.ddoss.cn 邮箱: proposal@ddoss.cn 
回复列表
默认   热门   正序   倒序

回复:shell if 条件判断文件或目录;字符串长度或为空,逻辑运算

头像

用户名:

粉丝数:

签名:

资料 关注 好友 消息