Shell使用小结

本文总结了Shell脚本的基础用法及高级技巧,包括换行、连续输出、批量执行脚本和服务、变量含义等,并通过实例详细介绍了如何实现服务的有序启动。

Shell使用小结

1.换行 \n 如:echo "test\n"

2.继续使用上一行,不换行 \c 如:echo "test\c"

3.如需批量执行多个sh文件,可直接将多个文件路径写入即可 如:
/opt/soft/apache-tomcat-8.5.12/bin/startup.sh
/opt/soft/apache-tomcat-8.0.30/bin/startup.sh

4.示例解读
#!/bin/sh
echo " "
echo ">>>>>>>>>>>>shell is doing【make by ran.chunlin】>>>>>>>>>>>>"
echo " "
/opt/soft/confluence/bin/begin-confluence.sh
while true;do
process=`ps -ef|grep tomcat|grep -v grep`
if [ "$?" == "0" ]
then
echo "【Print】confluence was started";
break;
else
echo "【Print】please wait,confluence is starting……";
fi
sleep 2s
done
/opt/soft/apache-tomcat-8.5.12/bin/startup.sh
/opt/soft/apache-tomcat-8.0.30/bin/startup.sh
svnserve -d -r /data/svn
/usr/local/nginx/sbin/nginx
echo " "
echo ">>>>>>>>>>>>shell was done【make byran.chunlin】>>>>>>>>>>>>"
echo " "
以上是我写的一个linux服务批量启动的shell,且对于企业wiki-confluence的一个优先启动,确保confluence启动成功后再启动其他服务。以下是解释:
[a]、上面true表示条件,
[b]、process=表示将命令执行的结果数用process接收,如果不接受也可以直接使用命令:ps -ef|grep tomcat|grep -v grep
[c]、$?意思参照下面:
变量 含义
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
$? 上个命令的退出状态,或函数的返回值。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。
当然也可以使用$process来表示申明的process变量。
[c]、if与[之间需要一个空格,否则报错,[]与条件直接也需要一个空格。
[d]、sleep 表示睡眠:
sleep 1 睡眠1秒
sleep 1s 睡眠1秒
sleep 1m 睡眠1分
sleep 1h 睡眠1小时

5.#! /bin/sh 是指此脚本使用/bin/sh来解释执行

6.杀掉死循环的shell:使用ps aux|grep ”脚本名“这种方式查找并kill

7.如果当前shell会执行另一个shell(或者系统命令),而另一个shell会输出信息,而我们又不想输出另一个shell的信息,那么,我们可以使用一个变量接收执行的返回结果就可以了,这样也不会输出另一个shell的信息,如,执行ps -ef|grep tomcat|grep -v grep会输出信息,那么使用count='ps -ef|grep tomcat|grep -v grep'就不会了。但是注意两者写法差异:
count=`ps -ef|grep tomcat|grep -v grep`
if [ "$?" = "0" ]
`ps -ef|grep tomcat|grep -v grep`
if [ $? -eq 0 ]

8.shell中0表示不存在,而“0”表示数字0,当前时间:`date '+%Y-%m-%d %H:%M:%S'` 注意:符合“`"为数字键1上的那个键,一般命令都是使用该符号包裹

9.-eq 和 = 都可以用来条件测试进行判断两个操作对象是否相同,但是有如下区别:
-eq 适用于整数数字,不能进行字符串的条件测试
= 既适用于数字,又适用于字符串

10.如果是批量执行sh文件的shell,且后面跟有一个附属文件应该注意:
形如:
/usr/local/redis-cluster/7001/bin/redis-server /usr/local/redis-cluster/7001/conf/redis.conf
/usr/local/redis-cluster/7002/bin/redis-server /usr/local/redis-cluster/7002/conf/redis.conf
批量启动redis,是不能成功的(如果没有后面的conf,单纯一个sh文件倒是可以成功)。
因此,可改为:
cd /usr/local/redis-cluster/7001/
bin/redis-server conf/redis.conf
cd /usr/local/redis-cluster/7002/
bin/redis-server conf/redis.conf

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值