我做了一个简单的shell脚本:
#!/bin/sh
file_name=$1
state=`cat "$file_name" | grep "port protocol" | awk '{print $4}'`
echo $state
reason=`cat "$file_name" | grep "port protocol"`
echo $reason
输出值$ state和$ reason。 但是,当我跑步时..
echo $state
..在控制台中它不会输出任何内容。似乎变量失去了它的价值。这是正常行为还是我应该对脚本有所帮助?
谢谢!
答案 0 :(得分:1)
假设您正在运行自己的脚本,例如./script.sh
或sh script.sh
,那么这就是预期的行为。子进程不能改变其父进程的环境。您从shell运行shell脚本这一事实并未改变此规则。
你可以做的是获取脚本而不是执行它,在本地环境中设置这些变量:
. script.sh
这有效地运行当前shell中脚本的行,因此将在那里设置变量。
虽然我已引起您的注意,但我建议您对脚本进行以下更改:
#!/bin/sh
file_name=$1
state=$(awk '/port protocol/ {print $4}' "$file_name")
echo "$state"
reason=$(grep "port protocol" "$file_name")
echo "$reason"
简而言之,引用您的变量,避免对cat
进行无用的调用,并在awk
中使用模式匹配,而不是将grep
传递给它。