首页 > 代码库 > 21.自学Linux之路:文件测试,参数轮替
21.自学Linux之路:文件测试,参数轮替
bash知识点之文件测试:
知识回顾:
字符测试:
格式:test 表达式
:[ 表达式 ]
:[[ 表达式 ]]
整数测试:
格式:test 表达式
:[ 表达式 ]
:[[ 表达式 ]]
文件测试:
单目测试:
-e /path/to/file:测试文件是否存在
-a /path/to/file:测试文件是否存在
-f /path/to/file:判断文件是否为普通文件
-d /path/to/file:判断文件是否为目录文件
-b /path/to/file:判断文件是否为块设备文件
-c /path/to/file:判断文件是否为字符设备文件
-h或-L /path/to/file:判断文件是否为符号链接文件
-p /path/to/file:判断文件是否为管道文件
-S /path/to/file:判断文件是否存在且为套接字文件
-r /path/to/file:判断当前文件是否存在且当前用户对该文件是否具有可读权限
-w /path/to/file:判断当前文件是否存在且当前用户对该文件是否具有写权限
-x /path/to/file:判断当前文件是否存在且当前用户对该文件是否具有执行权限
-s /path/to/file:判断当前文件是否存在且其内容是否为空
双目测试:
file1 -nt file2:文件1是否比文件2更新(修改时间),若文件1存在,文件2不存在,也认为file1更新
file1 -ot file2:文件1是否比文件2更旧
file1 -ef file2:文件1和文件2是否引用了相同的设备文件
例1:若/tmp/hello.r不存在则创建该文件
#!/bin/bash
fileName=/tmp/hello.r
[ -e $fileName ]||mkdir $fileName
例2:若当前文件对该配置文件有读权限,我们就将其载入
在脚本中,载入另一个文件中的配置的方法
方法1:source /path/to/somefile或者. /path/to/somefile
配置文件内容如下:/tmp/script/myscript.conf
userName=Tom
fileName=/etc/passwd
#!/bin/bash
#configFile=/tmp/script/myscript.conf
[ -r /tmp/script/myscript.conf] && ./tmp/script/myscript.conf
userName=$[userName:-testuser]
echo $userName
例3:用本地文件下载工具wget在脚本中下载文件
#!/bin/bash
url=‘http://172.16.0.1/centos6.5repo‘
which wget &> /dev/null || exit 5
downloader=`which wget`
[ -x $downloader ] || exit 6
$downloader $url
例4:写一个脚本完成以下任务
1.分别辅助/var/logs下的文件到/tmp/logs目录中
2.复制目录时,才使用cp -r
3.复制文件时,使用cp
4.复制链接文件cp -d
5.余下的使用cp -a
#!/bin/bash
#
targetDir=‘/tmp/logs‘
[ -e $targetDir ] || mkdir $targetDir
for fileName in /var/log/*; do
if [ -d $fileName ]; then
copyCommand=‘cp -r‘
elif [ -f $flieName ]; then
copyCommand=‘cp‘
elif [ -h $fileName ];then
copyCommand=‘cp -d‘
else
copyCommand=‘cp -a‘
fi
$copyCommand $fileName $targetDir
done
bash知识点之:位置参数轮替(shift)
写一个脚本,要求脚本后附带参数,脚本功能为求参数的和。
#!/bin/bash
#
declare -i sum=0
for i in `seq 1 $#`; do
let sum+=$i
shift
done
echo $sum
写一个脚本:使用形式如下
userinfo.sh -U username [-V {1|2}]
-U选项用于指定用户;而后脚本显示用户的UID和GID
如果同时使用了-V选项
-V后面的值是1,则额外显示用户的家目录路径
-V后面的值是2,则额外显示用户的家目录路径和shell
#!/bin/bash
#
[ $# -lt 2 ] && echo "Too less argements, quit" && exit 3
if [[ "$1" == "-U" ]];then
userName="$2"
shift 2
fi
if [ $# -ge 2] && [ "$1" == "-V" ];then
verFlag=$2
fi
if [ -n $verFlag ];then
if ! [[ $verFlag =~ [012] ]];then
echo "Wrong parameter"
echo "Usage:`basename $0` -u UserName -v {1|2}"
exit 4
fi
fi
#echo $userName $verFlag
if [ $verFlag -eq 1 ];then
grep "^$userName" /etc/passwd | cut -d: -f1,3,4,6
elif [ $verFlag -eq 2 ];then
grep "^$userName" /etc/passwd | cut -d: -f1,3,4,6,7
else
grep "^$userName" /etc/passwd | cut -d: -f1,3,4
fi
21.自学Linux之路:文件测试,参数轮替