shell脚本中的问题

时间:2009-10-15 12:40:11

标签: bash unix shell awk

我正在尝试此选项

#!/bin/ksh

echo $1
awk '{FS="=";print $2}' $1

并在命令行上

test_sh INSTANCE=VIJAY

但是awk失败了。这有什么问题吗? 基本上我需要在命令行上传递值VIJAY

5 个答案:

答案 0 :(得分:3)

ksh(和Bash)可以为你做分裂:

#!/bin/ksh
var="${1%=*}"
val="${1#*=}"
echo "Var is $var"
echo "Val is $val"

运行它:

$ ./scriptname INSTANCE=VIJAY
Var is INSTANCE
Val is VIJAY

答案 1 :(得分:2)

对于awk

,第二个参数是要处理的文件的名称。 所以你要求它处理名为INSTANCE=VIJAY

的文件

相反,做

echo "$1" | awk '{FS="=";print $2}'

为了清楚起见,这样做是通过来自echo输出的管道通过标准输入将要处理的输入传递给awk;而不是awk从文件中读取输入。

引用Awk manual

  

如果命令行中没有命名文件,gawk会读取标准输入。

答案 2 :(得分:1)

我认为更简单的是

#!/bin/sh

echo $1
echo $1 | cut -d= -f2

因为cut也可以在等号上拆分,然后显示第二个令牌。另请注意,传递$1awk不正确,因为该参数不是文件。

答案 3 :(得分:0)

我认为你离开了管道(|)

echo $1 | awk '{FS="=";print $2}' 

替代

echo $1 | cut -d'=' -f2

答案 4 :(得分:0)

#!/bin/ksh
echo $1 | cut -f2 -d=