在bash中的string/数组操作?

我想在bash(.bashrc)中这样的东西,所以别名是根据用户login的comp设置的。我不知道如何从10.0.0.210获得210,然后通过列表'user = xxx'

$radek ='210' $mike ='209' #SSH_CLIENT='10.0.0.210 53039 22' <--- system variable $user = based on the 4th part of IP so $user = radek if 210 $user = mike if 209 alias sites='cd /var/lib/code/'+$user 

所以最后的别名看起来像

'cd / var / lib / code / radek '如果从210电脑login

'cd / var / lib / code / mike '如果从209电脑login


最后的代码感谢@ Dennis Williamson

 users[210]=radek users[209]=mike octet=($SSH_CLIENT) # split the value on spaces #octed=${octet[0]##*.} # extract the last octet from the ip address alias sites='cd /var/lib/code/'${users[${octet[0]##*.}]} 

试试这个:

 users[210]=radek users[209]=mike octet=($SSH_CLIENT) # split the value on spaces octet=${octet[0]##*.} # extract the last octet from the ip address alias sites='cd /var/lib/code/'${user[octet]} 

另一种分配用户的方式:

 names=(bob jim anne kelly rick) octet=211 for name in ${names[@]} do users[octet++]=$name if (( octet > 255 )) then echo "Error: range limit exceeded" break fi done 

尝试这个:

 export user=`env|grep -i SSH_CLIENT|cut -d' ' -f1|cut -d'.' -f4` 

并删除别名中的+ 。 它应该是

 alias sites='cd /var/lib/code/'$user 

根据你的编辑希望这应该工作:

 temp_user=`env|grep -i SSH_CLIENT|cut -d' ' -f1|cut -d'.' -f4` user=`env|awk -F= "/=$temp_user/"'{print $1}'` 

如果你不需要格式的存储用户到IP映射的硬性要求,下面的示例脚本将工作:

 user_210="radek" user_209="mike" function define_alias { local ip_last_part=`echo $1 | cut -d ' ' -f1 | cut -d '.' -f4` eval user=$`echo "user_$ip_last_part"` echo "User '$user' identified for ip ending in '$ip_last_part'" alias sites="cd /var/lib/code/$user" echo "Alias defined : `alias sites`" } #Exampe usage : # will come from env export SSH_CLIENT='10.0.0.210 53039 22' define_alias $SSH_CLIENT export SSH_CLIENT='10.0.0.209 53039 22' define_alias $SSH_CLIENT 

如果你不想使用这个函数,你可以在函数的外面复制代码,并使用多米诺骨牌的建议来获取IP的最后部分。 喜欢这个 :

 user_210="radek" user_209="mike" ip_last_part=`env | grep -i SSH_CLIENT | cut -d ' ' -f1 | cut -d '.' -f4` eval user=$`echo "user_$ip_last_part"` echo "User '$user' identified for ip ending in '$ip_last_part'" alias sites="cd /var/lib/code/$user" echo "Alias defined : `alias sites`" 

HTH,
Madhur Tanwani