来自用户输入的变量中的文件路径

来自用户输入的变量中的文件路径

我正在尝试创建脚本,其中用户将提供某个文件的路径,脚本将检查文件是否存在并执行一些操作...我编写了以下代码:

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" ]

相关内容