作者 主題: shell script 請教  (閱讀 1524 次)

0 會員 與 1 訪客 正在閱讀本文。

zarr12steven

  • SA 苦力組
  • 懷疑的國中生
  • **
  • 文章數: 71
    • 檢視個人資料
shell script 請教
« 於: 2014-02-13 11:55 »
各位大大好,小弟又來發問了,目前的情況是我要寫一支shell script去檢查某一支php有沒有執行,但每次執行出來的都是fail,煩請各位大大指教

代碼: [選擇]
PHP='/var/www/user.php'
CHECK=`ps axu | grep php | awk '{ print $12 }' | grep $PHP`

if [ ${CHECK} = ${PHP} ];then
  echo "OK"
else
  echo "Fail"
fi

代碼: [選擇]
執行結果:
+ PHP=/var/www/user.php
+ grep /var/www/user.php
+ awk { print $12 }
+ grep php
+ ps axu
+ Check=/var/www/user.php
/var/www/user.php
+ [ = /var/www/user.php ]
check_php: 16: [: =: unexpected operator
+ echo Fail
Fail




不強就要挨打

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
Re: shell script 請教
« 回覆 #1 於: 2014-02-13 12:16 »
各位大大好,小弟又來發問了,目前的情況是我要寫一支shell script去檢查某一支php有沒有執行,但每次執行出來的都是fail,煩請各位大大指教

代碼: [選擇]
PHP='/var/www/user.php'
CHECK=`ps axu | grep php | awk '{ print $12 }' | grep $PHP`

if [ ${CHECK} = ${PHP} ];then
  echo "OK"
else
  echo "Fail"
fi

代碼: [選擇]
執行結果:
+ PHP=/var/www/user.php
+ grep /var/www/user.php
+ awk { print $12 }
+ grep php
+ ps axu
+ Check=/var/www/user.php
/var/www/user.php
+ [ = /var/www/user.php ]
check_php: 16: [: =: unexpected operator
+ echo Fail
Fail

把變數內容 echo 出來,看看是不是有抓到正確的資料

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17404
    • 檢視個人資料
    • http://www.study-area.org
Re: shell script 請教
« 回覆 #2 於: 2014-02-13 12:18 »
變數替換的時候,加上雙引號~^ _ ^

zarr12steven

  • SA 苦力組
  • 懷疑的國中生
  • **
  • 文章數: 71
    • 檢視個人資料
Re: shell script 請教
« 回覆 #3 於: 2014-02-13 12:31 »
變數替換的時候,加上雙引號~^ _ ^


回Yamaka大:
echo 出來是正確的!

回netman大:
其實我有沒有加雙引號都沒差!
我想再請問一下,當我下ps axu | grep php | awk '{ print $12 }' | grep $PHP  出來的程式不會固定在某一個位置,那有什麼好辦法可以抓到它?

我本來是打算用 ps axu | grep php | awk '{ print $12 }' | grep $PHP && echo $?

if [ $? = 0 ];then
  echo "OK"
else
  echo "Fail"
fi

但後面那個 && echo $? 反而是去判斷這個指令有無成功,返回值都是0,即使比對的東西是錯的,也是返回值0。
不強就要挨打

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17404
    • 檢視個人資料
    • http://www.study-area.org
Re: shell script 請教
« 回覆 #4 於: 2014-02-13 12:43 »
你加看看就知道了~

差在沒有值的時候

zarr12steven

  • SA 苦力組
  • 懷疑的國中生
  • **
  • 文章數: 71
    • 檢視個人資料
Re: shell script 請教
« 回覆 #5 於: 2014-02-13 13:38 »
你加看看就知道了~

差在沒有值的時候


回netman大:

PHP="'/var/www/user.php'"
CHECK="`ps axu | grep php | awk '{ print $12 }' | grep $PHP`"

if [ ${CHECK} = ${PHP} ];then
  echo "OK"
else
  echo "Fail"
fi

是這樣加的嗎?小弟愚味~~~!!!
不強就要挨打

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17404
    • 檢視個人資料
    • http://www.study-area.org
Re: shell script 請教
« 回覆 #6 於: 2014-02-13 15:25 »
"${variable}" 才是替換
你剛才是設定變數,不是替換變數。

如果沒意外,這個月我會去臺北跟大家講一場 shell script ,請留言公告吧~ ^ _ ^

zarr12steven

  • SA 苦力組
  • 懷疑的國中生
  • **
  • 文章數: 71
    • 檢視個人資料
Re: shell script 請教
« 回覆 #7 於: 2014-02-13 17:22 »
"${variable}" 才是替換
你剛才是設定變數,不是替換變數。

如果沒意外,這個月我會去臺北跟大家講一場 shell script ,請留言公告吧~ ^ _ ^


耶~~~謝謝netman大大!
原來是我加錯地方了!冏~~
剛修改時,有發現差異了!謝謝指教!
希望netman大大可以到台北來,超期待的,一定到場聽講!(灑花~~~
« 上次編輯: 2014-02-13 17:24 由 zarr12steven »
不強就要挨打

zarr12steven

  • SA 苦力組
  • 懷疑的國中生
  • **
  • 文章數: 71
    • 檢視個人資料
Re: shell script 請教
« 回覆 #8 於: 2014-02-13 18:08 »
變數替換的時候,加上雙引號~^ _ ^


回Yamaka大:
echo 出來是正確的!

回netman大:
其實我有沒有加雙引號都沒差!
我想再請問一下,當我下ps axu | grep php | awk '{ print $12 }' | grep $PHP  出來的程式不會固定在某一個位置,那有什麼好辦法可以抓到它?


自已回一下,因ps axu | grep php | awk '{ print $12 }' | grep $PHP 找出來的會亂跑,所以我就找到另一種方法來做,用  awk '/pattern/{ print $X}' ,這樣做法就不管我要找的那支程式怎麼跑,我都可以正確抓到我要的。以下是完整的寫法,也感謝netman大的指導。

代碼: [選擇]
PHP='/var/www/user.php'
CHECK=`ps axu | grep php | awk '/\/var\/www\/user.php/{ print $12 }'`

if [ "${CHECK}" = ${PHP} ];then
  echo "OK"
else
  echo "Fail"
fi
不強就要挨打