BASH:读取命令出错

时间:2013-05-26 04:57:12

标签: bash unix

有人可以告诉我为什么我会收到错误,并解释了解决代码的最佳方法:

#!/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

6 个答案:

答案 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)

两个问题:

  1. read $sftp应为read sftp
  2. 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个案例后添加更多案例。