Csh问题与非法变量名称

时间:2012-12-19 11:04:46

标签: variables csh

好的,这是我的整个代码我有一个新的错误:非法变量名称。

当我使用: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

2 个答案:

答案 0 :(得分:4)

你的代码似乎是bash和csh的混合,你的初始开头(shebang),你有#!/bin/sh,这绝对不是csh,并且因为旧行sh = originaUnix *不明确 Bourne *为方便起见,Shell或Linux系统可能会有/ 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 case 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

答案 1 :(得分: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.htmlhttp://faculty.plattsburgh.edu/jan.plaza/computing/help/tcsh.htm,了解有关csh脚本的更多信息。