2011-01-25 174 views
1

任何人都可以告訴我這個腳本究竟做了什麼?Linux腳本啓動,停止,重新啓動

#! /bin/sh 
test –f /usr/bin/sshd || exit 0 
case 「$1」 in 
    start) 
      echo –n 「Starting sshd: sshd」 
      /usr/sbin/sshd 
      echo 「.」 
      ;; 
    stop) 
      echo –n 「Stopping sshd: sshd」 
      kill `cat /var/run/sshd.pid` 
      echo 「.」 
      ;; 
    restart) 
      echo –n 「Stopping sshd: sshd」 
      kill `cat /var/run/sshd.pid` 
      echo 「.」 
      echo –n 「Starting sshd: sshd」 
      /usr/sbin/sshd 
      echo 「.」 
      ;; 
     *) 
      echo 「Usage: /etc/init.d/sshd start|stop|restart」 
      exit 1 
      ;; 
    esac 

我想知道究竟該部分:

#! /bin/sh 
test –f /usr/bin/sshd || exit 0 
case 「$1」 in 
    start) 
      echo –n 「Starting sshd: sshd」 
      /usr/sbin/sshd 
      echo 「.」 
      ;; 

確實因爲其他部分是一樣的! 請;)

回答

8

哪一部分是一樣的?腳本工作的方式是檢查$1的值,這是命令行上提供的腳本的第一個參數。如果它是'開始',則執行start)之後的部分。如果「停止」,則執行stop)之後的部分。如果是'重新啓動',那麼執行restart)之後的部分。

逐行對於第一部分:

#! /bin/sh 

嘿,這是一個shell腳本!具體來說,使用sh shell來執行這個腳本。

test –f /usr/bin/sshd || exit 0 

是否有文件叫做/usr/bin/sshd?如果不是,退出並返回0狀態。

case 「$1」 in 

檢查第一個命令行選項$1的值。

start) 

如果$1是 '開始' ......

  echo –n 「Starting sshd: sshd」 

打印 「Starting sshd: sshd」。

  /usr/sbin/sshd 

執行/usr/sbin/sshd

  echo 「.」 

打印「.」。

  ;; 

退出case聲明。

+0

謝謝你,你很清楚;) – Erma 2011-01-25 19:12:11

1

sshd將其進程ID寫入/ var/run中的文件。反引號導致它們內部的腳本被shell執行,並且結果被用於它的位置。

最終的結果是殺[sshd的PID]

1

你提到的部分啓動 「sshd的」 程序。這是安全外殼(SSH)守護進程(服務器進程)。

根據命令行參數,腳本啓動,停止或重新啓動SSH服務器。 $1代表命令行參數,並將此值與caseesac之間的不同可能值進行比較。

1

如果文件存在,test –f /usr/bin/sshd部分返回true||,所以|| exit 0只有在第一部分返回false時纔會執行(結束腳本)。

case "$1"部分,$1是傳遞給腳本的第一個參數。

1

「我想知道這部分究竟做了什麼......因爲其他部分是相同的!」

start)假定sshd尚未啓動,並啓動它。

這與重啓)不同,它首先停止sshd進程(如Joe所述),然後再次啓動它。