-2

到目前为止,这是我的代码:

#! /bin/bash

Options=("1" "2" "3")
select opt in "${Options[@]}"
do
  case "$REPLY" in
     1)
        who=$(whoami)
        echo -e "you are: $who"
        ;;
     2)
        var=$(uptime | awk '{print $3}' | cut -d, -f 1)
        echo $var
        ;;
     3) break;;
     *) echo "Invalid input";;
  esac
done

它不起作用。第一个选项工作得很好。然而第二个没有。

进一步的测试表明 bash 不太喜欢管道,输出只是“#”,这表明它只是实际执行的命令的 awk 部分。该命令在 shell 中运行良好(它只报告它在线的时间)。

4

2 回答 2

2

这行没有任何意义:

var=$(uptime | awk '{print 3}' | -d, -f 1)

awk声明应该是

awk '{print $3}'

并且cut声明应该是

cut -d ',' -f 1

老实说,您可能根本不需要该awk声明来完成您想要做的事情。只需管道uptimecut上面的语句。

var=$(uptime | cut -d ',' -f 1)
于 2013-04-01T03:49:03.873 回答
0

当您使用 Windows/Dos 中的文本文件并在 unix 中重用它时,就会发生这种情况。

每个操作系统中的行终止符都不同。高温高压

ps 当您在 vi/vim 中打开文本文件时,您会注意到行尾有一个 ^M。

不起作用说“剪切:无效的字节或字段列表” – user2230627 Apr 1 at 3:34

于 2013-04-15T15:54:03.083 回答