2012-01-18 21 views
0

このスクリプトはKorn Shellでどのように書き直すのですか?それはバッシュの権利ですか?私は、すべてのシェル間の実際の違いにちょっと混乱しています...それをKornシェルに変換する正しい軌道にいるのですか?これを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

上部のシバン線を#!/ 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 doc:http://www2.research.att.com/sw/download/man/man1/ksh88.htmlとksh93 doc:http://を参照してください。 www2.research.att.com/sw/download/man/man1/ksh.html。['[' 'を検索してください。 – shellter

+0

投稿後わずか19分後にコミュニティウィキとしてどのように風化しましたか? – shellter

+0

Kornshellには '' [''と ']]のテストがありますが、この特定のものには何もありませんKornshellと互換性のないlarスクリプトBashとKornshellの両方でスクリプトを正常に実行しました。私がコメントしているのは、ユーザを追加するスクリプトの主張ですが、 –

2

このスクリプトは書かれて完全にKornシェル互換性があります。あなたはそれに何かをする必要はありません。

KornshellとBashは異なりますが、ごくわずかです。最も一般的なものは次のとおりです。

  • Kornshellsには​​printがあり、Bashにはありません。しかし、どちらもprintfです。
  • KornshellとBashの違いはtypesetです。 Kornshellはより豊かな構文を持っています。 Bashは同じことをするために他のコマンドを使います。
  • Bashには、コマンドライン機能の豊富なセットがあります。 KornshellとBashはどちらもオプションを設定するのにset -oを持っていますが、Bashにはshoptの設定もあります。そして、Bashはより良いプロンプト構文を持っています。 PS="\[email protected]\h:\w$ "がBashで何をするのかを私のKornshellに促すプロンプトを設定するためには、何をすべきかを信じられません。
  • 算術処理にもいくつかの違いがあると思います。私はちょうど私の頭の上からそれを考えることができません。

このスクリプトは、新しいユーザーに与えるときに、ユーザーが/ etc/passwdファイルに追加することはありません。

+0

それはダミースクリプト/例のほうが多いです。 –

+0

Kshは浮動小数点演算をサポートしていますが、Bashはサポートしていません。どちらも 'echo'を持っていますが、 'printf'が優先されます。 +1 –

関連する問題