本文所选的例子来自于《Advanced Bash-scripting Gudie》一书,译者 杨春敏 黄毅
ABS书上的例子是这样的:
#!/bin/bash echo hello;echo there if [ -x "$filename" ]; then #注意分号后面的空格 echo "File $filename exists."; cp $filename $filename.bak else echo "File $filename not found."; touch $filename fi; echo "File test complete."
这个脚本有个问题:
1.filename是个变量,$filename缺乏传入值
2.-x是检测文件是否存在且具有可执行权限,如果存在且具有可执行权限,为真,但是else之后,仅仅echo文件没有找到,这样不是特别清楚(其实我们也可以认为符合名字叫filename的具有可执行权限的文件不存在,尽管名字叫filename但不具有执行权限的文件是存在的)。为了更清晰的表达,应该分为两种情况:a.文件不存在 b.文件存在但不具有执行权限。
一个改进的脚本
#!/bin/bash echo hello;echo there E_ERRORARGS=65 read -p "please input filename: " -t 30 filename if [ -z "$filename ]; then #检查传入的变量值是否为空 echo "Usage: `basename $0` filename can't be null." exit $E_ERRORARGS elif [ -x "$filename ]; then #检查文件是否存在且具有执行权限 echo "File $filename exists and have exec power."; cp $filename $filename.bak #如果文件存在,打印提示语句,并修改文件名 elif [ -e "$filename ]; then #检查文件是否存在 echo "File $filename exists and have no exec power." #如果文件存在但不具有可执行权限,打印提示语句 else echo "File $filename not found."; touch $filename #如果文件不存在,创建文件 fi; echo "File test complete."
脚本运行结果
我这里在sh下有个存在且具有执行权限的文件123,有个存在但不具有执行权限的文件456,没有文件789(文件789最终会被创建)
#!