我正在尝试编写一个脚本,该脚本接受一个包含目录名称的参数,并检查它是否存在。脚本的名称应为:script_practice_3.sh 并将 blc 传递给脚本。例如:./script_practice_3.sh blc
由于某种原因,我的脚本不起作用,我不知道为什么。我熟悉 unix 脚本编写,这真的让我很沮丧。
#!/bin/bash
echo "What is the parameter name that contains the script name: "
read SCRIPT
echo "What is the parameter name that contains the value blc: "
read VALUE
if [ "$?" = "0" ]
then
echo "You must provide one parameter"
elif [ "$?" > "1" ]
then
echo "You must provide only one parameter"
else
test -d $SCRIPT
if [ "$?" = "0" ]
then
echo "Already exists"
else
mkdir $VALUE
echo "directory created"
fi
答案1
特殊变量$?
是退出状态最近运行的命令。给予脚本的参数数量(位置参数的数量)由 给出$#
。
您不能用于>
比较一个值在数值上是否大于另一个值。为此,请使用-gt
.该>
测试是确定字符串排序顺序的测试(“ b
sort after a
” "b" > "a"
)。
您还缺少]
其中一项测试。
如果您希望在命令行上为脚本提供单个参数,我也不确定为什么要交互式读取两个值。
建议:
#!/bin/sh
if [ "$#" -ne 1 ]; then
echo need exactly one argument >&2
exit 1
elif [ -d "$1" ]; then
printf '"%s" is already a directory\n' "$1" >&2
exit 1
elif ! mkdir "$1"; then
printf 'failed to create directory "%s"\n' "$1" >&2
exit 1
fi
printf 'Successfully created directory "%s"\n' "$1"
$1
整个脚本中使用的是第一个位置参数(提供给脚本的第一个参数)。
这里的中间测试实际上是不需要的,因为如果尝试创建一个已经存在的目录mkdir
(没有它的-p
选项)会抱怨,所以这将被最后一个测试捕获。
该脚本将按照您在问题中提出的建议被调用,
./script.sh "some directory name"