有人可以告诉我为什么我会收到错误,并解释了解决代码的最佳方法:
#!/bin/sh
SFTP=1
SSH=2
SCP=3
echo "Starting Seedbox Macro"
echo " . . . . . . . . . . . . . . "
echo "Type 1 for SFTP, type 2 for SSH, type 3 for SCP"
read $sftp
if [sftp]
then echo "Starting SFTP";
sftp -P 78 192.168.100.101;
fi
答案 0 :(得分:4)
我建议您使用select
命令来避免所有样板代码。
#!/bin/sh
echo "Starting Seedbox Macro"
echo " . . . . . . . . . . . . . . "
select mycmd in sftp ssh scp quit; do
case "$mycmd" in
sftp)
sftp -P 78 192.168.100.101
;;
ssh)
ssh ...
;;
scp)
scp ...
;;
quit)
exit
;;
esac
done
答案 1 :(得分:2)
read
的参数是一个变量名,所以它应该是:
read sftp
当您希望将变量扩展为bs替换时使用 $
,例如
if [ "$sftp" = 1 ]
then ...
如果您要求从菜单中进行选择,则可能需要考虑使用select
命令而不是read
。
答案 2 :(得分:1)
尝试:
read sftp
if [ "$sftp" -eq "1" ]
等...
答案 3 :(得分:0)
在变量中使用read时不应该使用`$',所以你最好把它放在这样的东西:
read sftp
if [ "$sftp" -eq $SFTP ]
...
答案 4 :(得分:0)
read $sftp
应为read sftp
。 if
循环应为
if [ "$sftp" -eq 1 ]
答案 5 :(得分:0)
您可以使用while
命令进行处理。我认为这是BEST
方式。
#!/bin/sh
while true
do
echo -n "Please, type!"
read ANSWER
case $ANSWER in
sftp)
SFTP CODE GOES HERE...
break
;;
ssh)
SSH CODE GOES HERE...
exit
;;
scp)
SCP CODE GOES HERE...
exit
;;
*) echo "Please enter only sftp, ssh or scp!"
esac
done
echo "Process done!"
您可以添加不同的案例,而不是“sftp”,“ssh”或“scp”。或者,您可以在这3个案例后添加更多案例。