2016-02-11 4 views
0

Я боролся с этой проблемой часами и пробовал все, что мог найти на досках объявлений. Я не могу переключиться на bash, это должно быть в bin/sh.Shell Scripting Неожиданный оператор

Проблема с циклом 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 и получил обратную связь. Соответственно внесены изменения. –