好的,这是我的整个代码我有一个新的错误:非法变量名称。
当我使用: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
答案 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.html或http://faculty.plattsburgh.edu/jan.plaza/computing/help/tcsh.htm,了解有关csh脚本的更多信息。