我是bash脚本的新手,我正在编写一个脚本来自动使新创建的.sh
文件可执行。因此,我想检查.sh
是否前面有唯一提供的参数,以确保文件名有效。
但是,运行[: too many arguments
时出现./createExecutableScript.sh asd.sh
错误。
最初,我以为是因为$1
未被包裹在"
中导致了错误,所以在其中添加了"
s。
我也提到了这个问题
(Linux Shell Script - String Comparison with wildcards),并在*
之外添加了"
。
#!/bin/bash
if [ "$#" -eq 1 ] && [ "$1" == *".sh" ]
then
echo "Creating file with name: $1"
else
echo "Invalid or missing filename!"
fi
答案 0 :(得分:1)
Linux Shell Script - String Comparison with wildcards中的答案是正确的,您需要像这样使用双括号:
#!/bin/bash
if [ "$#" -eq 1 ] && [[ "$1" == *".sh" ]]
then
echo "Creating file with name: $1"
else
echo "Invalid or missing filename!"
fi
答案 1 :(得分:-1)
因此没有变量1。您可以执行类似a=$1
的操作,然后将$a
放在if
语句中。您需要的是$($1)
而不是$1