Linux bash中的case语句替代方案
我有一个依赖于主机名的脚本。如果主机名是X,那么使用Y作为该主机的变量是一种需求 映射在一个文件中。大约有50个映射。我可以用一个case语句来解决这个问题,但是我想寻找更简单的替代方法,从文件中读取映射,而不是为所有50台服务器编写case语句 例如: 映射文件是Linux bash中的case语句替代方案,linux,bash,shell,unix,switch-statement,Linux,Bash,Shell,Unix,Switch Statement,我有一个依赖于主机名的脚本。如果主机名是X,那么使用Y作为该主机的变量是一种需求 映射在一个文件中。大约有50个映射。我可以用一个case语句来解决这个问题,但是我想寻找更简单的替代方法,从文件中读取映射,而不是为所有50台服务器编写case语句 例如: 映射文件是file.txt Apple Fruit chair furniture man human pizza food 我的逻辑是: hostname=uname -n case $hostname in c
file.txt
Apple Fruit
chair furniture
man human
pizza food
我的逻辑是:
hostname=uname -n
case $hostname in
chair )
Qmgr=furniture
rest of my code here
;;
Apple )
Qmgr=fruit
rest of my code here
;;
man )
Qmgr=Human
rest of my code here
;;
pizza )
Qmgr=Food
rest of my code here
;;
* )
not recognized serer from the mappings file.txt
;;
esac
将数据读入关联数组
declare -A managers
while read -r host mgr; do
managers[$host]=$mgr
done < file.txt
hostname=$(uname -n)
qmgr=${managers[$hostname]}
if [[ -z $qmgr ]]; then
printf 'Unrecognized server %s\n' "$hostname"
fi
declare-A管理器
而read-r主机管理器;做
经理[$host]=$mgr
完成
将数据读入关联数组
declare -A managers
while read -r host mgr; do
managers[$host]=$mgr
done < file.txt
hostname=$(uname -n)
qmgr=${managers[$hostname]}
if [[ -z $qmgr ]]; then
printf 'Unrecognized server %s\n' "$hostname"
fi
declare-A管理器
而read-r主机管理器;做
经理[$host]=$mgr
完成
您可以将file.txt
的内容读入关联数组,但不清楚您的case
语句在做什么。前两种情况有意义(如果主机名与第一列匹配,则将Qmgr
设置为文件的第二列),但后两种情况没有意义。为什么man=human
是一种情况,而不是在$hostname
匹配man
时设置Qmgr=human
?您可以将file.txt
读入关联数组,这样您就可以编写类似Qmgr=${managers[$(uname-n)]}
,但这不能解决我的代码的其余部分
。我在最后两个case语句中的错误。我更正了它们。代码的其余部分是简单的构建内容(比如基于变量Qmgr构建目录),请注意,类似的代码应该从case语句中分解出来,而不是作为样板自动生成。这就是疯狂的方式。你可以将file.txt
的内容读入一个关联数组,但不清楚你的case
语句在做什么。前两种情况有意义(如果主机名与第一列匹配,则将Qmgr
设置为文件的第二列),但后两种情况没有意义。为什么man=human
是一种情况,而不是在$hostname
匹配man
时设置Qmgr=human
?您可以将file.txt
读入关联数组,这样您就可以编写类似Qmgr=${managers[$(uname-n)]}
,但这不能解决我的代码的其余部分
。我在最后两个case语句中的错误。我更正了它们。代码的其余部分是简单的构建内容(比如基于变量Qmgr构建目录),请注意,类似的代码应该从case语句中分解出来,而不是作为样板自动生成。这就是疯狂的方式。$mgr在这里做什么。read
可以在文件读取时分割文件的每一行。因此,对于第一行,host
是Apple
,mgr
是Fruit
,等等。谢谢你的工作。一个警告是,我正在远程运行这个脚本。也就是说,脚本将在中央服务器上本地,并将在目标服务器上执行逻辑。正在尝试调整以使用远程ssh。$mgr在这里做什么。read
可以在读取文件时拆分文件的每一行。因此,对于第一行,host
是Apple
,mgr
是Fruit
,等等。谢谢你的工作。一个警告是,我正在远程运行这个脚本。也就是说,脚本将在中央服务器上本地,并将在目标服务器上执行逻辑。正在尝试调整以使用远程ssh。