Как мне написать это в Korn Shell? - PullRequest
0 голосов
/ 19 января 2012

Как мне переписать этот скрипт в Korn Shell? Это ведь в Bash? Я немного смущен фактическими различиями между всеми оболочками ... Я на правильном пути, чтобы преобразовать его в Korn Shell?

usage ()
{
     echo      "usage: ./file.sk user"
}
# test if we have two arguments on the command line
if [[ $# != 1 ]]
then
    usage
    exit
fi

# Search for user
fullname=$(cut -f1 -d: /etc/passwd | grep "$1")
if [[ $? -eq 0 ]]; then
                echo "User already found:"
                grep $1 /etc/passwd
        exit
        else
                #get numbers
                cat /etc/passwd | gawk -F: '{print $3}' | sort -n > currentuid4
                #get last number
                last=`tail -1 currentuid4`
                echo last $last
                #add +1
                newuid=`expr $last + 1`
                #print it
                echo "ADDED: $1 with UID: $newuid"
        exit
fi

Ответы [ 2 ]

2 голосов
/ 19 января 2012

Этот скрипт полностью совместим с Kornshell. Вам не нужно ничего с этим делать.

Kornshell и Bash отличаются, но в очень немногих местах. Наиболее распространенные из них:

  • У Корншеллов есть print, а у Баша нет. Однако оба имеют printf.
  • Kornshell и Bash отличаются тем, как typeset работает. Kornshell имеет гораздо более богатый синтаксис. Bash использует другие команды, чтобы сделать то же самое.
  • Bash имеет более богатый набор функций командной строки . Kornshell и Bash оба имеют set -o для настройки параметров, но Bash также имеет параметры shopt. И Bash имеет лучший подсказочный синтаксис. Вы не поверите, через что мне пришлось пройти, чтобы моя подсказка Kornshell делала то, что PS="\u@\h:\w$ " делает в Bash.
  • Я полагаю, что в арифметике также есть некоторые различия. Я просто не могу думать об этом прямо из головы.

Этот сценарий, кстати, не добавляет пользователя в файл / etc / passwd, как он утверждает, когда вы даете ему нового пользователя.

0 голосов
/ 19 января 2012

Я предлагаю заменить [[ ... ]] на [ ... ] и использовать -eq / -ne, чтобы сделать скрипт более переносимым на разных оболочках.

usage ()
{
     echo      "usage: ./file.sk user"
}
# test if we have two arguments on the command line                                                                                                            
if [ "$#" -ne 1 ]
then
    usage
    exit
fi

# Search for user                                                                                                                                              
fullname=$(cut -f1 -d: /etc/passwd | grep "$1")
if [ "$?" -eq 0 ]; then
                echo "User already found:"
                grep $1 /etc/passwd
        exit
        else
                #get numbers                                                                                                                                   
                cat /etc/passwd | gawk -F: '{print $3}' | sort -n > currentuid4
                #get last number                                                                                                                               
                last=`tail -1 currentuid4`
                echo last $last
                #add +1                                                                                                                                        
                newuid=`expr $last + 1`
                #print it                                                                                                                                      
                echo "ADDED: $1 with UID: $newuid"
        exit
fi
...