2011-01-25 177 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所述),然后再次启动它。