Linux bash中的字符串/数组操作?
我想在bash(.bashrc)中这样做,以便根据用户登录的comp设置别名。我不知道如何从10.0.0.210中获得210,然后是通过列表“user=xxx”的最佳方式Linux bash中的字符串/数组操作?,linux,bash,Linux,Bash,我想在bash(.bashrc)中这样做,以便根据用户登录的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 = m
$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
试试这个:
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
如果不想使用该函数,可以将函数中的代码复制到外部,并使用domino的建议获取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`"
嗯,,
尝试一下:
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
那名字呢?我需要用radek替换210,但我想让它更通用,因为我们很少人:-)哇,哇,哇。非常好。我不得不稍微修改一下代码,使其正常工作。非常感谢你
users[210]=radek users[209]=mike octet=($SSH_CLIENT)#分割空格上的值#${octet[0]##*.}#从ip地址别名sites='cd/var/lib/code/'${users[${octet[0]####*.}
@radek:Oops,对不起,这是我的打字错误。你的版本有效,但我正在编辑答案以显示我的意图。不要抱歉:-)你帮助了我,所以你只能为自己感到骄傲。最优雅的回答。。。
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