需要 3 个特定读取变量的脚本存在语法错误?

需要 3 个特定读取变量的脚本存在语法错误?

我必须手写对已经给我的脚本的回复。我必须给出输出的两组信息是要读取的变量是否为 3 3 3 和 20 3 5。

我决定先测试一下脚本,但第 19 行仍然出现语法错误,并且无法找出问题所在。我已经测试了间距和括号的多种变体,但无法完全实现。任何帮助,将不胜感激。

#!/bin/sh
## Name of the program is challengelab3.2

## request information from the user
echo enter 3 numbers
read a b c

## check for proper range of numbers
if [ $a -gt 10 -o $b -gt 10 -o $c -gt 5 ]; then
    echo "numbers out of range"
    exit 1
fi

# process_data
x=$(($a + $b + $c))

while [ $x -gt 0 ]
do
     echo (( $x / 2%2 ))
     x=$((expr $x -1))
done

# end of program

答案1

试试这个:

#!/bin/sh
## Name of the program is challengelab3.2

## request information from the user
echo enter 3 numbers
read a b c

[ -z "$a" ] && echo a is missing, enter all 3 numbers && exit 1
[ -z "$b" ] && echo b is missing, enter all 3 numbers && exit 1
[ -z "$c" ] && echo c is missing, enter all 3 numbers && exit 1

if [ "$a" -gt 10 -o "$b" -gt 10 -o "$c" -gt 5 ]; then
    echo "numbers out of range"
    exit 1
fi

# process_data
x=$((a + b + c))

while [ "$x" -gt 0 ]
do
    echo $(( x / 2 % 2 ))
    x=$((x - 1))
done
  1. shell算术是用$(( ... ))

  2. $(())请记住在and之外引用变量[[ ]]。如果没有引号,如果 $a 或 $b 或 $c 未定义(例如,用户仅输入 1 或 2 个数字),则会出现语法错误,因为-gt需要两个操作数。

相关内容