shell脚本编程基础之文件测试

文件测试判断条件

-e FILE:测试文件是否存在
-f FILE:测试文件是否为普通文件
-d FILE:测试指定路径是否为目录
-r FILE:测试当前用户对指定文件是否有读权限
-w FILE:测试当前用户对指定文件是否有写权限
-x FILE:测试当前用户对指定文件是否有执行权限

Example:
[ -e /etc/passwd ]
[ -x /etc/shadow ]

多分支if语句

if 判断条件1;then
  statement1
  ...
elif 判断条件2;then
  statement2
  ...
elif 判断条件3;then
  statement3
  ...
else
  statement4
  ...
fi

Example:
#!/bin/bash
FILES=/etc/

if [ ! -e $FILES ];then
   echo no such file
elif [ -f $FILES ];then
   echo file
elif [ -d $FILES ];then
   echo "$FILES is directory"
else
   echo unknow
fi
首先判断/etc/是否存在,如果不存在则显示no such file,然后退出脚本;如果/etc/存在,第一个判断为假,继续判断/etc/是否为普通文件,是则显示file,退出脚本;不是继续判断/etc/是否为目录,是显示一句话然后退出,所有判断都不对,最后则执行else,打印unknow

测试脚本是否有语法错误:

[root@localhost ~]# bash -n xxxx.sh
[root@localhost ~]# bash -x xxxx.sh        #单步执行

位置参数的应用

#!/bin/bash

if [ -e $1 ];then         #位置参数不用在脚本中设置,执行脚本时添加位置参数
   echo file
else
   echo no such file
fi
[root@localhost script]# bash file2.sh /etc/fstab     #指定/etc/fstab这个位置参数

特殊变量

$?:上一个命令的执行状态返回值
$#:参数的个数
$*:参数列表
$@:参数列表

Example1:
#!/bin/bash

if [ $# -lt 1 ];then
   echo Please Input Parameters
elif [ -e $1 ];then
   echo "$1 exist" 
else
   echo "$1 not exist"
fi
如果参数个数小于1,打印一句话后退出脚本;如果参数个数不小于1,第一个判断条件不满足,判断第二个条件,文件是否存在,存在打印一句后退出;上面两个条件都不满足执行最后一个语句

Example2:
#!/bin/bash

if [ $# -lt 2 ];then
   echo "Not enough parameters"
   exit 6
fi

echo "The sum is: $[$1+$2]"
echo "The product is: $[$1*$2]"
当参数个数小于2,打印一句话退出整个脚本,返回一个状态码为6;当不满足判断条件,则打印两个参数的和是多少,乘积是多少

位置参数之shift

shift用于位置参数之后,如有参数$1、$2、$3;在$1之后使用shift,则使用完$1这个位置参数之后,踢掉$1参数,$2变为$1,$3变为$2;shift后面可以跟数字,可以踢掉多个参数
如:shift NUMBER

字符串测试

==(=):测试两边字符串是否相等,相等为真,不等为假;==(=)两端要有空格,否则系统会认为是变量赋值
!=:测试两边字符串是否不等,不等为真,相等为假
>:测试大于
<:测试小于
-n string:测试指定字符串是否为空,空则真,不空则假
-s string:测试指定字符串是否不空,不空则真,空则假

Example:
#!/bin/bash

if ! id $1 &>/dev/null;then
   echo no such user
   exit 10
fi

if [ `id -n -u $1` == `id -n -g $1` ];then    #id -n -u user,只显示user用户的用户名,不显示uid;-n需要配合-u、-g、-G使用
   echo "same"
else
   echo "different"
fi
先判断用户是否存在,如果不存在,则打印一句话后退出脚本,如果用户存在,继续往下判断;判断==两边字符串是否相同

猜你喜欢

转载自www.cnblogs.com/dongzhanyi123/p/11994996.html