标签: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