Linux bash中的字符串/数组操作?

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

我想在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 = 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