我正在尝试编写if / elif / else语句,如果变量等于“Full”,它将捕获一个文件,如果相同的变量等于“Quick”,它将读取一个不同的较小文件。该变量在脚本之外设置,并由export var1=Quick
我有
#!/bin/sh
echo $var1
export $var1=var1
{
#try cat-ing the file. If it cannot be read, exit with error.
if [ "$var1" = "Full" ];
then
echo "Full read chosen"
cat foo
exit 0
elif [ "$var1" = "Quick" ];
then
echo "Quick read chosen"
cat bar
exit 0
else
echo "Please choose quick or full"
exit 1
fi
}
当我尝试通过调用./test
来运行脚本时,似乎没有设置变量
+ '[' '' = Full ']'
+ '[' '' = Quick ']'
+ echo 'Please choose quick or full'
Please choose quick or full
+ exit 1
是否有原因,即使变量是在脚本之外导出的,变量也没有传递给脚本?
答案 0 :(得分:2)
以下绝对可行:
$ export var1=Quick
$ ./yourscript
...其中yourscript
是相关脚本。
因此,您的问题需要进行调整,以包含足够的信息和细节来重现问题。
顺便说一句,你的脚本会更好地编写:
#!/bin/sh
case $var1 in
Full)
echo "Full read chosen" >&2
cat foo
;;
Quick)
echo "Quick read chosen" >&2
cat bar
;;
*)
echo "Please choose quick or full" >&2
exit 1
;;
esac
exit 0
以下两项工作都适用于我:
$ var1=Quick ./yourscript
Quick read chosen
cat: bar: No such file or directory
$ (export var1=Quick; ./yourscript)
Quick read chosen
cat: bar: No such file or directory
答案 1 :(得分:1)
问题是变量的名称。将$ var1更改为$ 1就可以了。