我正在尝试在文本文件中插入名称和数字。我为学习目的写了一个简短的脚本。
v= expr $# % 2
echo $v
if [ "$v" -eq 0 ]; then
i=1
while [ "$i" -lt $# ]
do
echo "$i $i+1" >> database
i=$((i+1))
done
echo "User(s) successfully added \n\v"
else
echo "Arguments are not complete";
fi
当我输入两个参数时,shell输出如下
0 # (The value of variable v)
./myscript: line 3: [: : integer expression expected
Arguments are not complete # (else statement is executed)
当我在第3行(如果语句)中将-eq替换为==时,错误信息消失了,但IF语句仍未按预期执行。
0 # (output of variable v)
Arguments are not complete # (else statement is executed)
答案 0 :(得分:2)
您需要将变量赋值括在$(...)
中("命令替换"):
v=$(expr $# % 2)
在if
声明中,-eq
应该是正确的。另外,为了确保它有效,我会使用双方括号(这可能取决于你使用的shell):
if [[ ${v} -eq 0 ]]; then
答案 1 :(得分:0)
当前的问题是未能使用命令替换来捕获expr
命令的结果:v=$( expr $# % 2 )
。然而,
算术不再需要expr
;像使用增量i
一样使用算术表达式。
v=$(( $# % 2 ))