2012-12-19 3 views
1

내 코드가 맞습니다. 새 오류 : 잘못된 변수 이름이 있습니다. 잘못된 변수 이름이있는 Csh 문제

내가 가진 파일을 실행

: CSH filename.sh

결과는 다음과 같습니다 불법 변수 이름. (? $ == 1)! :

나는 부분에 포함하는 문제라고 생각하면서 #/빈/쉬

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

pls 내 대답. –

답변

4

귀하의 코드가 떠들썩한 파티와 CSH의에 의해 혼합 것 같다 당신의 초기 오픈 (shebang), 당신은 #!/bin/sh, 확실히 csh가 아니며 구식 sh = originaUnix * 으로 모호합니다. Bourne * 쉘 또는 Linux 시스템은/bin/bash를/bin과 링크 할 수 있습니다 편의상/sh.

$?이 csh의 유효한 변수가 아니라는 오류 메시지가 표시되면 해당하는 $status을 사용하려고합니다.

코드를 실행하는 데 csh에 액세스 할 권한이 없지만 내가 궁금한 사항이 몇 가지 있으며 csh 구문이 잘못되었다는 것을 알고 있습니다.

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

ps -u $a >&fichier 

당신의 의도가 무엇에 대해 나는 회의적,

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 

이다 시도하고, 작동하지 않습니다 ? 파일 fichier에 글을 쓰는 경우 읽고있는 곳이 표시되지 않습니다. 어떤 목적을 위해 봉사합니까?

추가 도움이 필요하면 질문을 수정하여 정확한 오류 메시지 (코드 형식)를 포함 시키십시오.

P.

미래에 유닉스 스크립팅을 사용해야하는 경우 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 병동이를 증가 @ i++를 사용 후 상단의 set i = 0을하고 있습니다.

다음 오류는 $etat이 정의되지 않았습니다.

또한 Csh는 switch() case을 사용합니다.

csh 스크립팅에 대한 자세한 내용은 http://www.grymoire.com/Unix/Csh.html 또는 http://faculty.plattsburgh.edu/jan.plaza/computing/help/tcsh.htm을 살펴 보는 것이 가장 좋습니다.