bash脚本编程之四 文件测试及特殊变量

文件测试:

-e file 测试文件是否存在

-f file 测试文件是否为普通文件

-d file  测试指定路径是否为目录

-r file 测试当前用户对指定用户是否有读权限

-w file .....写权限

-x file ......执行权限


[ -e /etc/inittab ]

[ -x /etc/rc.d/rc.sysinit ]


给定一个文件

如果是普通文件,就显示之

如果是目录,就显示之

否则,此为无法标识文件


定义脚本退出状态码

exit :退出脚本

exit #

如果脚本没有明确定义退出状态码,那么,最后执行的

一条命令的退出码即为脚本的退出状态码



#!/bin/bash

#

FILE=/etc/rc.d/rc.sysinit


if [ ! -e $FILE ];then

        echo "No such file"

        exit 6  

fi


if [ -f $FILE ];then

        echo "common file"

elif [ -d $FILE ]; then 

        echo "directory"

else

        echo "unknow."

fi



多分支的if语句

if 判断条件1;then

statement1

...

elif 判断条件2; then

statements

...

elif 判断条件3;then

statement3

...

else

statement4

....

fi


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

bash -n 脚本

bash -x 脚本:单步执行、断点执行(大段脚本非常好用)


bash变量的类型:

本地变量

环境变量

位置变量:

$1,$2,$3.....

shift


./demo.sh /etc/fstab /etc/inittab

$1:/etc/fstab

$2:/etc/inittab

特殊变量:

$? 退出状态码

$# 获取参数的个数

$* 参数列表

$@ 参数列表


shift:轮替参数

#!/bin/bash

echo $1

shift

echo $1

shift

echo $1


./demo.sh 1 2 3 # 显示:1 2 3


练习:写一个脚本

能接受一个参数(文件路径)

判断:此参数如果是一个存在的文件,显示OK,否则,显示NO SUCH FILE

#!/bin/bash

#

if [ $# -lt 1 ]; then

        echo "Usage:./demo.sh ARG1 [ARG2...]"

        exit 7

fi


if [ -e $1 ]; then

        echo "ok"

else

        echo "no such file"

fi

调用:./demo.sh /etc/fstab


练习:写一个脚本

给脚本传递两个参数(整数)

显示此两者之和,之积

#!/bin/bash

#

if [ $# -lt 2 ]; then

        echo "Usage:demo.sh ARG1 ARG2"

        exit 5

fi


echo "the sum is : $[$1+$2]"

echo "the prod is : $[$1*$2]"



练习:写一个脚本

给定一个用户,获取其密码警告期限:

而后判断用户使用期限距今天是否已经小于警告期限

提示:算术运算的方法$[$A-$B]:表示变量A的值减去变量B的值的结果:

     计算方法,最长使用期限减去已经使用的天数即为剩余使用期限

如果小于,则显示“warning”;否则,显示“OK”

#!/bin/bash

W=`grep "user1" /etc/shadow | cut -d : -f6 `

S=`date +%s` 

T=` expr $S/86400`

L=`grep "^user1" /etc/shadow | cut -d: -f 5`

N=`grep "^user1" /etc/shadow | cut -d: -f3`

SY=$[$L-$[$T-$N]]


if [ $SY -lt $W ];then

echo "warning"

else

echo "ok"

fi


你可能感兴趣的:(编程,File,用户)