任何人都可以告诉我这个脚本到底是做什么的吗?
#! /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 “.”
;;
因为其他部分是一样的! 请;)
答案 0 :(得分:9)
哪个部分是相同的?脚本的工作方式是检查$1
的值,这是命令行提供的脚本的第一个参数。如果它是'start',则执行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
声明。
答案 1 :(得分:1)
sshd将其进程ID写入/ var / run中的文件。反引号导致它们内部的脚本由shell执行,结果用于它的位置。
最终结果是kill [sshd pid]
答案 2 :(得分:1)
你提到的部分开始了“sshd”程序。它是Secure Shell(SSH)守护程序(服务器进程)。
根据命令行参数,您的脚本将启动,停止或重新启动SSH服务器。 $1
表示命令行参数,此值与case
和esac
之间的不同可能值进行比较。
答案 3 :(得分:1)
如果文件存在,test –f /usr/bin/sshd
部分将返回true
。 ||
是或,因此只有在第一部分返回false时才会执行|| exit 0
(结束脚本)。
在case "$1"
部分,$1
是传递给脚本的第一个参数。
答案 4 :(得分:1)
“我想知道这部分究竟是什么......因为其他部分是一样的!”
开始)假设sshd尚未启动,并启动它。
这与 restart)不同,后者首先停止sshd进程(如Joe描述的那样),然后再次启动它。