-1

有人可以告诉我为什么会出错,并解释处理代码的最佳方法:

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

6 回答 6

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
于 2013-05-26T05:07:31.503 回答
2

to 的参数read是一个变量名,所以它应该是:

read sftp

$当您希望将变量扩展为 bs 替换时使用,例如

if [ "$sftp" = 1 ]
then ...

如果您要求从菜单中进行选择,您可能需要考虑使用select命令而不是read.

于 2013-05-26T05:00:06.443 回答
1

尝试:

read sftp
if [ "$sftp" -eq "1" ]

ETC...

于 2013-05-26T04:59:29.343 回答
0

在变量中使用 read 时不应该使用 `$',所以最好这样写:

read sftp
if [ "$sftp" -eq $SFTP ] 
...
于 2013-05-26T05:03:10.407 回答
0

两个问题:

  1. read $sftp应该是read sftp

  2. if循环应该是

    if [ "$sftp" -eq 1 ]

于 2013-05-26T05:03:38.643 回答
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 个案例之后添加更多案例。

于 2013-05-26T07:07:19.767 回答