2012-01-18 43 views
0

如何在Korn Shell中重寫此腳本?它在Bash中是對的?我對所有炮彈之間的實際差異感到有點困惑......我是否正確地將它轉換爲Korn Shell?如何在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 
+0

快速測試和構造('if ... fi','$(...)'似乎在ksh中工作,您是否嘗試過? – Kevin

+0

您是否嘗試將頂部的shebang行更改爲#!/ bin/ksh?我沒有看到任何明顯是bash特定的東西,它應該可以工作,或者用'set -vx',你應該可以在5分鐘內修復它。祝你好運。 – shellter

回答

0

,我建議由[ ... ]更換[[ ... ]]和使用-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 
+2

對不起,'' [[...]]'一直在ksh中支持。請參閱ksh88文檔:http://www2.research.att.com/sw/download/man/man1/ksh88.html AND ksh93 doc:http:// www2.research.att.com/sw/download/man/man1/ksh.html。只搜索'[['。祝大家好運。 – shellter

+0

在發佈後只有19分鐘後,這是怎麼發展成爲社區wiki的?這是一個新的哲學只是好奇,沒有見過這種情況發生之前 – shellter

+0

這是不正確的。Kornshell有'[['和']]'測試。 Lor腳本是Kornshell不兼容的。我成功地在Bash和Kornshell中運行腳本。我要評論的唯一事情是腳本聲稱添加用戶,但不會 –

2

此腳本完全與Kornshell兼容。你不必爲此做一件事。

Kornshell和Bash確實不同,但在很少的地方。最常見的是:

  • Kornshells有print和Bash沒有。然而兩者都有printf
  • Kornshell和Bash在typeset的工作方式不同。 Kornshell具有更豐富的語法。 Bash使用其他命令來做同樣的事情。
  • Bash有一套更豐富的命令行功能。 Kornshell和Bash都有set -o來設置選項,但是Bash也有shopt設置。而且,Bash有更好的提示語法。你不會相信我必須通過設置我的Kornshell提示來做什麼PS="\[email protected]\h:\w$ "在Bash中做什麼。
  • 我相信算術處理也有一些差異。我只是想不出我的頭腦。

順便說一下,此腳本不會將用戶添加到/ etc/passwd文件中,因爲它會在您給它一個新用戶時聲稱。

+0

是的,它更像是一個虛擬腳本/示例。 –

+0

Ksh支持浮點運算,但Bash不支持。兩者都有'echo',但是'printf'是首選。 +1 –