运行bash脚本执行文件操作时报错cannot stat 'file'如何解决?
报错原因
你写的脚本存在两处语法错误:
- 变量引用没有加
$前缀:bash中要读取变量存储的值,必须在变量名前加$符号,你写的cp file newfile里的file和newfile会被bash识别成固定的文件名,而不是你之前通过read命令存入变量的用户输入值,所以执行时会找名叫file的文件,找不到就抛出了对应报错。 - 不必要的命令替换:你用
$()包裹了cp/mv/rm命令,$()是bash的命令替换语法,会先执行括号内的命令,再把输出结果当成新的命令执行,此处完全不需要这层逻辑,直接写命令本身即可。
修复后的脚本代码
case $choice in 1) read -p "Enter the file to copy:" file read -p "Enter the new file name:" newfile cp "$file" "$newfile" ;; 2) read -p "Enter the file to move:" mvfile read -p "Enter the file where to move:" newmv mv "$mvfile" "$newmv" ;; 3) read -p "Enter the file name to remove:" filenm rm "$filenm" ;; esac
补充说明:给变量加双引号是为了兼容文件名带空格的场景,避免执行命令时参数解析错误。
修改点梳理
- 所有引用变量的位置添加
$前缀,正确读取用户输入的文件名 - 移除了所有命令外层的
$()包裹 - 变量引用处增加双引号包裹,兼容带空格的文件名
内容的提问来源于stack exchange,提问作者jaswanth
相关产品推荐
相关产品推荐

