операции со строками / массивами в bash? - PullRequest
3 голосов
/ 05 августа 2010

Я хочу сделать что-то подобное в bash (.bashrc), чтобы псевдоним устанавливался в зависимости от того, какой комп вошел в систему. Я не знаю, как получить 210 из 10.0.0.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

итоговый псевдоним выглядит как g

'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 ]

3 голосов
/ 05 августа 2010

Попробуйте:

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 голос
/ 05 августа 2010

Если у вас нет строгих требований к формату для сохранения сопоставления пользователя с 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, Мадхур Танвани

1 голос
/ 05 августа 2010

попробуйте это:

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}'`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...