我编写了一个脚本,它可以解析文件并根据文件内的固定宽度设置变量。
然后我想检查每个变量,如果是空白字段,则将其设置为“0”。一个简单的变体是:
one=1
two=""
three=3
four=""
for num in $one $two $three $four
do
echo num is $num
done
输出结果为:
num is 1
num is 3
我想要做的是编写代码if $two is null then two=0
。
我怎样才能做到这一点?
答案1
您需要 -z 比较运算符 http://tldp.org/LDP/abs/html/comparison-ops.html
if [ -z $two ]; then ## or [ -z $num ] to test them all
two=0
fi
echo "num is $num"
答案2
你的问题没什么意义。首先,如果你说
one=1
two=""
three=3
four=""
for num in $one $two $three $four
do
︙
那么该for
语句将被解释为
for num in 1 3
因此只有两次迭代,等于num
和1
。3
如果你想有四次迭代,等于num
、1
(null)3
和 (null),那么你需要说
for num in "$one" "$two" "$three" "$four"
您应该引用 shell 变量引用,除非您有充分的理由不这样做,并且您确定您知道自己在做什么。
所以,
for num in "$one" "$two" "$three" "$four"
do
echo "num is $num"
done
将导致
num is 1
num is
num is 3
num is
现在,如果你想要的结果是,,,,1
很简单0
,3
0
for num in "$one" "$two" "$three" "$four"
do
if [ "$num" = "" ]
then
num=0
fi
echo "num is $num"
done
注意
[
,之前和之后必须有空格=
,之前和之后必须有空格- 之前必须有空格
]
(如果之后还有其他内容,则之后也必须有空格),并且 fi
拼写if
错误。
但你的问题标题提到“未设置变量” 。two
并且four
放为空字符串;
five
和six
(以及,,,orange
以及其他潜在变量名的准无限列表)是pumpkin
tiger
取消设置。有区别。如果那是你感兴趣的,你需要问一个不同的问题,因为如果你这样做
for num in "$one" "$two" "$three" "$four" "$five" "$six" "$orange" "$pumpkin" "$tiger"
do
︙
那么就无法区分five
、six
、orange
、
pumpkin
和tiger
迭代与two
和four
迭代 —
num
在所有七种情况下都将设置为空字符串。您需要直接测试$four
和$five
(等)变量。
PS 不要问新问题;进行搜索。这个问题之前已经回答过了。