2012-12-19 69 views
1

好吧,這是我的整個代碼我有一個新的錯誤:非法的變量名稱。Csh問題與非法變量名

當我執行與文件:CSH filename.sh

結果是:非法變量名。

我認爲包含的部分問題:($?== 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 
+0

請回答我。 –

回答

4

您的代碼似乎是bash和CSH並通過混合您初始開放(shebang),你有#!/bin/sh,這絕對不是csh,並且與舊行sh不一致。/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情況sytnax是

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

和,我懷疑

ps -u $a >&fichier 

什麼是你的意圖有?如果你正在寫文件fichier,我沒有看到你正在閱讀的地方。它的用途是什麼?

如果您需要進一步的幫助,請編輯您的問題以包含確切的錯誤消息(格式爲代碼)。

P.S.

如果您將來需要使用Unix腳本,那麼您將通過使用csh並轉換爲ksh/bash來增強整體市場性。儘可能多的代碼是bash,您最好將第一行更改爲#!/bin/bash,然後研究並修復產生的錯誤消息。

IHTH

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

關於csh腳本的更多信息,最好的方法是看看http://www.grymoire.com/Unix/Csh.htmlhttp://faculty.plattsburgh.edu/jan.plaza/computing/help/tcsh.htm