2016-02-11 61 views
0

我一直在努力解决这个问题几个小时,并尝试了所有我可以在讨论板上找到的东西。我无法切换到bash,这是打算在bin/shShell脚本意外操作员

问题出在while循环,while [ $currentID -gt 0 ]。该错误是" 21: [: 2893: unexpected operator

#!/bin/sh 

Menu_Option=0 

echo "WELCOME" 
echo "--------------------------------------------------------------" 
while [ $Menu_Option -ne 4 ] 
do 
    echo "select a menu option" 
    echo "1- ancestry history" 
    echo "2- who is online" 
    echo "3- what process any user is running" 
    echo "4- exit" 
    read Menu_Option 
    case $Menu_Option in 
    1) 
     echo "THE ANCESTRY TREE FOR CURRENT PROCESS IS...." 
     echo " " 
     ps -ef > file1 
     currentID=$(awk '{if ($3 == '$PPID') print $2}' file1) 
     while [ $currentID -gt 0 ] 
     do 
      Process_Name=$(awk '{if ($2 == $currentID) print $8 " " $9}'  file1) 
+1

你检查什么'currentID'设置为?在设置它之后添加诸如'echo $ currentID'之类的东西,看看你从awk中找回了什么。 –

+0

它返回多个值。我怎样才能解决这个问题? –

+0

如果不知道自己的意图和返回什么价值,很难说出来? –

回答

0

希望下面就是你需要:

#!/bin/sh 

Menu_Option=0 

echo "WELCOME" 
echo "--------------------------------------------------------------" 
while [ $Menu_Option -ne 4 ] 
do 
     echo "select a menu option" 
     echo "1- ancestry history" 
     echo "2- who is online" 
     echo "3- what process any user is running" 
     echo "4- exit" 
     read -r Menu_Option 
     case $Menu_Option in 
     1) 
       echo "THE ANCESTRY TREE FOR CURRENT PROCESS IS...." 
       echo " " 
       ps -ef > file1 
       currentID=$(awk '{if ($3 == '$PPID') print $2}' file1) 
       while [ "$currentID" -gt 0 ] 
       do 
         Process_Name=$(awk '{if ($2 == '"$currentID"') print $8 " " $9}'  file1) 
         echo "$Process_Name" 
         currentID=$(awk '{if ($3 == '"$currentID"') print $2}' file1) 
         if [ "$currentID" = "" ] 
         then 
           currentID=-1; 
         fi 
       done 
       echo "" 
     esac 
done 
+0

谢谢。我很好奇你为什么在awk语句中围绕双引号使用单引号。 –

+0

一旦我完成了脚本,我就通过http://www.shellcheck.net了解了它,并得到了反馈。相应地做出更改。 –