验证通过读命令获得的多个输入

时间:2015-09-08 16:44:51

标签: shell validation input ksh

我正在尝试使用shell脚本验证由空格分隔的多个输入(在下面的情况下为两个磁盘名称)。但是,我没有成功。有人能帮我吗?

read DISK
if [ "${1}" = "" ] || [ "${2}" = "" ]
then
printf "The Disk pairs cannot be left blank. Exiting script!!!"
exit 1
else
TMP=$DISK
printf "The disks entered are $TMP"
fi

2 个答案:

答案 0 :(得分:1)

对于ksh93,您可以使用

read -A disks
if [[ ${#disks[@]} -ne 2 ]]; then
    print -u2 "You need to enter 2 disks" 
    exit 1
else
    print "You entered: ${disks[*]}"
fi

对于ksh88,请使用位置参数

read disks
set -- $disks
if [[ $# -ne 2 ]]; then
    print -u2 "You need to enter 2 disks" 
    exit 1
else
    print "You entered: $disks"
fi

答案 1 :(得分:0)

变量${1}${2}是命令行参数,与上一个读命令无关。有不同的方法来使用DISK变量。 一旦你读了DISK变量,我就会选择像

这样的解决方案
echo "${DISK}" | while read disk1 disk2 otherfields; do
   echo "disk1=${disk1}, disk2=${disk2}"
done
# or better
disk1="${DISK% *}"; echo "${disk1}"
disk2="${DISK#* }"; echo "${disk2}"
# or worse
disk1=$(echo "${DISK}" | cut -d" " -f1)
disk2=$(echo "${DISK}" | cut -d" " -f2)

如果您已经知道要拆分字段,则可以更改第一个读取命令。将read DISK替换为

read disk1 disk2 remaining_input