【发布时间】:2018-07-15 17:29:34
【问题描述】:
我在运行一个简单的脚本时遇到了问题,如果没有新的 case 语句,它就可以正常工作。我希望我的脚本能够“捕获”用户“意外”输入的特殊字符作为命令行上的参数并输出错误消息。我目前的情况如下:
if [ $# -eq 0 ]
then echo "Please enter a filename."
else
if [ -f $1 ]
then
starting_data=$1
sed '/^id/ d' $starting_data > raw1
sed 's/-//' raw1 > raw2
sed 's/-//' raw2 > raw3
sed 's/,//' raw3 > raw4
sed 's/,/:/' raw4 > raw5
cut -f1 -d\ raw5 > col3
cut -f2 -d\ raw5 > col2
cut -f3 -d\ raw5 > col1
paste -d\ col1 col2 col3 > final
name="Joe"
echo $name
date
cat final
else
if case $1 in
[!@#$%^&*()-_=+{}\|;:'",<>?/]) echo "One or more characters not
supported."
echo "Please try again."
;;
esac
else
echo "$1 cannot be found."
fi
fi
fi
【问题讨论】:
-
欢迎来到 SO,如果您可以让我们知道示例输入和示例输出,则无需使用这么多
sed或awks,我们也可以尝试帮助您。跨度> -
您遇到了什么样的“麻烦”?请详细说明。
-
这是我运行脚本 hw9.sh 并提供简单参数(不存在的文件)的示例 $ ./hw9.sh xxx ./hw9.sh: 第 23 行:语法意外令牌
&' ./hw9.sh: line 23:附近出错@ [!@#$%^&*()-_=+{}\|;:'",?/]) echo "一个或多个字符不支持。"'跨度> -
添加一个shebang,然后将您的脚本粘贴到那里:shellcheck.net
-
sed -e '/^id/ d' -e 's/-//' -e 's/-//' -e 's/,//' -e 's/,/:/' "$starting_data" | cut -f1-3 -d\ > final和进一步优化以摆脱cut也是可能的。
标签: bash unix if-statement case