![来自用户输入的变量中的文件路径](https://linux22.com/image/3873/%E6%9D%A5%E8%87%AA%E7%94%A8%E6%88%B7%E8%BE%93%E5%85%A5%E7%9A%84%E5%8F%98%E9%87%8F%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6%E8%B7%AF%E5%BE%84.png)
我正在尝试创建脚本,其中用户将提供某个文件的路径,脚本将检查文件是否存在并执行一些操作...我编写了以下代码:
read -p "Enter path: " $path
#check if path is not empty string
if [ -z $path ]
then
echo "path is empty string"
exit
fi
#check if file exist
if [ ! -f $path ]
then
echo "file doesnt exists"
fi
我的问题是第二个条件 - 如果我改变$path
一些字符串,一切都正常,但是当我通过变量输入路径时,它总是“文件不存在”,我正在尝试
if [ ! -f `$path` ]
但如果文件没有执行权限,结果也会失败。有人可以帮我修复上面的代码吗? :)
编辑抱歉,我的意思-z
是-f
不是双重-z
条件
答案1
这里的问题是反引号:
`command`
用于运行命令并替换其输出流(标准和错误)作为结果,这就是当您提供没有执行权限的文件时测试失败的原因。
如何解决这个问题
使用
if [ -f "$path" ]
双引号是为了防止分词(如果包含空格)和通配符(如果路径包含通配符,如*
或?
)
更好的是,由于路径可能是目录,只需使用以下命令检查路径是否存在-e
:
if [ -e "$path" ]