Linux云服务器——Bash Shell学习笔记 (1)

这第一篇的Bash Shell学习笔记呢,是我在研究L4D2-Competitive-Rework他的服务器一键脚本中得出来的,主要分为对指令后添加的像是-l -s之类的作用是什么,还有就是Bash Shell的一些基本的指令和语法。

首先先来看srcds的第一段

case "$1" in
	start)
		echo "Starting $DESC: $NAME"
		if [ -e $DIR ]; then
			cd $DIR
			su $SRCDS_USER -l -c "screen -d -m -S $NAME $DAEMON $PARAMS"
		else
			echo "No such directory: $DIR!"
		fi
		;;

”Case“ 类似于C++中的switch语句,具体就不多在这里阐述。

echo "Starting $DESC: $NAME"

“echo” 指的是字符串的输出,也不用多说。

“$” 是用在变量前面,作用是引用变量。

if [ -e $DIR ]; then
	cd $DIR
	su $SRCDS_USER -l -c "screen -d -m -S $NAME $DAEMON $PARAMS"
else
	echo "No such directory: $DIR!"
fi

然后就是常见的If Else语句,这个要注意一下包含条件语句要用[ ]圈起来,else不用esle结束,只有if要用fi结束。

if [ -e $DIR ]; then

在If里面的条件是判断前面用户所设的路径是否正确,“-e”的作用是判断文件是否存在,存在的话则为真。

su $SRCDS_USER -l -c "screen -d -m -S $NAME $DAEMON $PARAMS"

切换用户语句里面的附加条件"-l"与"-c"分别代表login(登录)与command(指令),代表了登录进用户以后使用后面的screen指令

Screen后面的附加条件"-d" "-m" "-S"分别代表Detached(离线)、即使已经有了一个对应的Screen依旧强制创建一个新的、对创建的Screen窗口命名。


接下来看第二段stop代码

stop)
		if su $SRCDS_USER -l -c "screen -ls" |grep $NAME; then
			echo -n "Stopping $DESC: $NAME"
			kill `su $SRCDS_USER -l -c "screen -ls" |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'`
			echo " ... done."
		else
			echo "Couldn't find a running $DESC"
		fi
		;;

在第二行的If语句中出现了新的" | grep "代码,这是linux的基础功能,“ | ”代表管道符,对前面已经执行出的结果执行新的命令,"grep"是字符串查询命令。

echo -n "Stopping $DESC: $NAME"

echo后面出现了新的"-n"指令,这是换行符的意思。

kill `su $SRCDS_USER -l -c "screen -ls" |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'`

这里就好玩了,用"kill"杀死查询出来的screen的进程,注意su前面的不是单引号而是键盘Esc下面的那个波浪号的小点,具体什么作用我暂时也不知道xD

回到代码,先用"screen -ls"调出所有screen窗口,然后用 "| grep"查询相对应的窗口,awk是文本处理语言,"-F ."代表以“ . ”作为分隔符输出第一项(也就是$1)。举个例子,当语句中有3个单词分别是Apple Bat Cat时,不输入-F代表默认以空格作为分隔符,此时print $1时只会出现Apple,要是用" . "作为分隔符的话则会输出Apple Bat Cat,因为他查询不到" . "就会继续向下输出。


下面来看我也是第一次才学到的知识,

status)
	# Check whether there's a "srcds" process
	ps aux | grep -v grep | grep srcds_r > /dev/null
	CHECK=$?
	[ $CHECK -eq 0 ] && echo "SRCDS is UP" || echo "SRCDS is DOWN"
	;;

这一段的关键在于第三行代码,实在是太牛逼了。

ps aux | grep -v grep | grep srcds_r > /dev/null

ps aux以BSD格式来显示进程,接下来用grep -v去除grep查询的进程得出一个更为正确的进程表,再次嵌套一个grep查询是否存在srcds_r,接下来就是最牛逼的地方,grep srcds_r之后的" > /dev/null"将查询结果重定向到/dev/null这个文件,这个文件是一个特殊的文件,任何写入的东西都会被删除,它的作用就在于,清楚查询的结果,只返回一个程序是否正确执行的数字。后面一段的CHECK=$?就用到了这个返回值,"$?"代表读取上一条程序的返回结果,如果为0则程序正确运行,如果为其他数字则是程序没有正常执行。最后通过一个判断条件[ $CHECK -eq 0 ]判断$CHECK是否为0,是的话输出"SRCDS is UP",为其他数字的话就输出"SRCDS is DOWN"。总的来说就是以查询程序是否正确执行来判断服务器的运行情况,我这是第一次接触这种方法,让我大受震撼。

感谢你看到这里,希望我的总结对你有用,一起学习,一起进步!

下面是一些我用到的参考文档,想要深入理解文中出现的一些内容可以看看,也是非常有用的东西捏!

参考:

Linux 下的两个特殊的文件 -- /dev/null 和 /dev/zero 简介及对比_longerzone的专栏-CSDN博客

Linux下ps -ef和ps aux的区别及格式详解 - 旅途 - 博客园 (cnblogs.com)

L4D2-Competitive-Rework/srcds1 at master · SirPlease/L4D2-Competitive-Rework · GitHub

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值