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

时间:2010-08-05 07:59:19

标签: 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 = mike if 209

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

所以最后的别名看起来像

'cd / var / lib / code / radek '如果从 210 计算机

进行记录

'cd / var / lib / code / mike '如果从 209 计算机

进行记录

最终代码归功于@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]##*.}]}

3 个答案:

答案 0 :(得分:3)

尝试一下:

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

答案 1 :(得分:1)

试试这个:

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}'`

答案 2 :(得分: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