脚本无法正常工作——脚本编写新手

脚本无法正常工作——脚本编写新手

我正在尝试编写一个脚本,该脚本接受一个包含目录名称的参数,并检查它是否存在。脚本的名称应为: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.该>测试是确定字符串排序顺序的测试(“ bsort 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"

相关内容