使用ssh的“语法错误:意外的文件结尾”

时间:2012-06-09 23:48:22

标签: linux bash upload ssh download

有谁能告诉我这段代码有什么问题?它应该是帮助我在远程服务器上进行速度测试。尝试使用PUTTY通过SSH执行时出现以下错误: 语法错误:意外的文件结尾

    ssh_server=$1
    test_file=".scp-test-file"
    # Optional: user specified test file size in kBs
    if test -z "$2"
    then
        # default size is 10kB ~ 10mB
        test_size="10000"
    else
        test_size=$2
    fi
    # generate a 10000kB file of all zeros
    echo "Generating $test_size kB test file..."
    `dd if=/dev/zero of=$test_file bs=$(echo "$test_size*1024" | bc) \
        count=1 &> /dev/null`
    # upload test
    echo "Testing upload to $ssh_server..."
    up_speed=`scp -v $test_file $ssh_server:$test_file 2>&1 | \
        grep "Bytes per second" | \
        sed "s/^[^0-9]*\([0-9.]*\)[^0-9]*\([0-9.]*\).*$/\1/g"`
    up_speed=`echo "($up_speed*0.0009765625*100.0+0.5)/1*0.01" | bc`
    # download test
    echo "Testing download to $ssh_server..."
    down_speed=`scp -v $ssh_server:$test_file $test_file 2>&1 | \
        grep "Bytes per second" | \
        sed "s/^[^0-9]*\([0-9.]*\)[^0-9]*\([0-9.]*\).*$/\2/g"`
    down_speed=`echo "($down_speed*0.0009765625*100.0+0.5)/1*0.01" | bc`
    # clean up
    echo "Removing test file on $ssh_server..."
    `ssh $ssh_server "rm $test_file"`
    echo "Removing test file locally..."
    `rm $test_file`
    # print result
    echo ""
    echo "Upload speed:   $up_speed kB/s"
    echo "Download speed: $down_speed kB/s"

任何想法?谢谢!

1 个答案:

答案 0 :(得分:2)

从那些不属于变量赋值的命令周围移除反引号。

此外,确保在行继续反斜杠之后没有制表符,空格或回车符(并且文件中根本没有回车符。)

不是乘以丑陋的“0.0009765625”,而是除以2^17131072

你为什么除以1?只是省略。除以100而不是乘以0.01。

即使变量的内容不太可能包含空格,你应该养成在扩展变量时始终引用变量的习惯。

#!/bin/bash
ssh_server=$1
test_file=".scp-test-file"
# Optional: user specified test file size in kBs
if test -z "$2"
then
    # default size is 10mB
    test_size="10000"
else
    test_size=$2
fi
# generate a file of all zeros
echo "Generating $test_size kB test file..."
dd if=/dev/zero of="$test_file" bs=$(echo "$test_size*1024" | bc) \
    count=1 &> /dev/null
# upload test
echo "Testing upload to $ssh_server..."
up_speed=$(scp -v "$test_file" "$ssh_server:$test_file" 2>&1 | \
    sed -n '/Bytes per second/s/^[^0-9]*\([0-9.]*\)[^0-9]*\([0-9.]*\).*$/\1/p')
up_speed=$(echo "scale = 2; $up_speed / 131072 * 100.0" | bc -l)
# download test
echo "Testing download to $ssh_server..."
down_speed=$(scp -v "$ssh_server:$test_file" "$test_file" 2>&1 | \
    sed -n '/Bytes per second/s/^[^0-9]*\([0-9.]*\)[^0-9]*\([0-9.]*\).*$/\2/p')
down_speed=$(echo "scale = 2; $down_speed / 131072 * 100.0" | bc -l)
# clean up
echo "Removing test file on $ssh_server..."
ssh $ssh_server "rm '$test_file'"
echo "Removing test file locally..."
rm "$test_file"
# print result
echo
echo "Upload speed:   $up_speed kB/s"
echo "Download speed: $down_speed kB/s"