2

これが私のコード全体です。新しいエラーがあります。変数名が不正です。

ファイルを実行すると: csh filename.sh

結果: 無効な変数名。

while ( $? == 1 ) #!/bin/sh の部分に含まれる問題だと思います

set quitter = "N"
# Boucle sur  la condition d'arret du script:
while ( $quitter == "N" )

 # Saisie du nom de l'utilisateur :
 echo "Quel utilisateur ?"
 set a = $<
 # Mettre le résultat de la commande ps -u 
 # dans un fichier quelque soit le résultat (juste ou faux) :
 ps -u $a >&fichier
 # La varible $? vaudra 1 si la dernière commande qui a été éxcuter 
 # a retourné une erreur, 0 sinon.
 # On boucle donc j'usqu'a ce que le nom d'utilisateur soit correct:
 while ( $? == 1 )

   echo -n "Nom d'utilisateur innexistant, entrez un autre :"
   set a = $<
   ps -u $a >&fichier

commande=$(tail -$i tempfile|head -1|cut -d" " -f2)
let i=i+1
echo -n " $commande : "
case $etat
in
D) echo "endormi => ininterruptible" 
S) echo "endormi" 
R) echo "en cours" 
T) echo "stoppe" 
Z) echo "zombi" 
*) echo "inconnu" 
esac
end
 # Suppression du fichier qui a servi aux tests
 rm fichier;
 echo -n "voulez-vous quitter ? (O/N):";set quitter = $<
end
4

2 に答える 2

5

あなたのコードは bash と csh が混在しているようで、最初のオープニング (シバン) までに#!/bin/sh、これは間違いなく csh ではなく、古い行としてあいまいです sh=originaUnix* Bourne *Shell OR a Linux system may便宜上、/bin/bash へのリンクを /bin/sh として用意してください。

エラーメッセージは正しいことを伝えています$?.cshで有効な変数ではありません.同等のものを使用したい$status.

あなたのコードを実行するために csh にアクセスすることはできませんが、私が疑問に思っていることがいくつかあり、csh の構文が間違っていることがわかっています。

commande=$(tail -$i tempfile|head -1|cut -d" " -f2)

うまくいきません、試してください

set commande = `tail -$i tempfile|head -1|cut -d" " -f2`
# tnx to @dwalter for correct syntax on that!

cshケースの構文は

 switch ( "$etat" )
      case D:
        echo "endormi => ininterruptible" 
      breaksw
     default:   
         echo "unknown option provided in as etat=$etat"
     breaksw
  endswitch

そして、私は懐疑的です

ps -u $a >&fichier

そこにあなたの意図は何ですか?ファイルfichierに書き込んでいる場合、どこから読み取っているのかわかりません。それはどのような目的に役立ちますか?

これについてさらにサポートが必要な場合は、質問を編集して正確なエラー メッセージ (コードとしてフォーマット) を含めてください。

PS

将来、Unix スクリプトを使用する必要がある場合は、csh の使用をやめて ksh/bash に変換することで、全体的な市場性が向上します。コードの多くが であるためbash、最初の行を に変更してから#!/bin/bash、結果のエラー メッセージを調査して修正することをお勧めします。

IHTH

于 2012-12-19T13:52:07.867 に答える
2

まず最初に (完全を期すために) に変更#!/bin/sh#!/bin/cshます。

次に変更

commande=$(tail -$i tempfile | head -n 1|cut -d" " -f2)

set commande = `tail -$i tempfile | head -n 1|cut -d" " -f2`

また、あなたlet i=i+1は一番上にいる必要がset i = 0あり、ワードを使用@ i++してそれを増やします。

次のエラーは、$etat定義されていないことです。

また、Csh は を使用しswitch() caseます。

詳細については、http://www.grymoire.com/Unix/Csh.html または http://faculty.plattsburgh.edu/jan.plaza/computing/help/tcsh.htm を参照しください csh スクリプトについて。

于 2012-12-19T15:29:50.757 に答える