如何编写linux
的启动脚本
如何编写linux 的启动脚本
linux 下shell 脚本
了解linux shell
shell是系统的⽤户界⾯,提供了⽤户与内核进⾏的交互操作的⼀种接⼝;它接收⽤户输⼊的命令并把它送到内核去执⾏。
Shell有⾃⼰的编程语⾔⽤于对命令的编辑,它允许⽤户编写由shell命令组成的程序。Shell编程语⾔具有普通编程语⾔的很多特点,⽐如它也有循环结构和分⽀控制结构等,⽤这种编程语⾔编写的Shell程序与其他应⽤程序具有同样的效果。
Linux提供了像MicrosoftWindows那样的可视的命令输⼊界⾯–X Window的图形⽤户界⾯(GUI)。它提供了很多桌⾯环境系统,其操作就像Windows⼀样,有窗⼝、图标和菜单,所有的管理都是通过⿏标控制。GNOME。
每个Linux系统的⽤户可以拥有他⾃⼰的⽤户界⾯或Shell,⽤以满⾜他们⾃⼰专门的Shell需要。
shell 中的变量定义和引⽤
1. 变量定义和初始化。shell是弱类型语⾔(语⾔中的变量如果有明确的类型则属于强类型语⾔;变量没有明确类型就是弱类型语⾔),和C语⾔不同。在shell编程中定义变量不需要制定类型,也没有类型这个概念。
2. 变量定义时可以初始化,使⽤=进⾏初始化赋值。在shell中赋值的=两边是不能有空格的。
注意:shell对语法⾮常在意,⾮常严格。很多地⽅空格都是必须没有或者必须有,⽽且不能随意有没有空格。
3. 变量赋值,变量定义后可以再次赋值,新的赋值会覆盖⽼的赋值。shell中并不刻意区分变量的定义和赋值,反正每个变量就是⼀个符号,这个符号的值就是最后⼀个给他赋值时的值。
4. 变量引⽤。shell中引⽤⼀个变量必须使⽤符号就是变量解引⽤符号。
注意:
var,也可以{var}⽽不能简单的$var
shell 中调⽤linux 命令
1. 直接执⾏;
2. 反引号括起来执⾏。有时候我们在shell中调⽤linux命令是为了得到这个命令的返回值(结果值),这时候就适合⽤⼀对反引号(键盘上ESC按键下⾯的那个按键,和~在⼀个按键上)来调⽤执⾏命令。PWD=pwd
echo $PWD MYPATH="pwd \include"
MYPATH1=’pwd \include’
echo “MYPATH=MYPATH1”
shell 中的选择分⽀结构
典型if 语⾔格式
if [表达式]; then
xxx
else
xxx
fi
符号,符号后⾯跟⼀个字符串,这个字符串就会被当作变量去解析。如果这个字符串本⾝没有定义,执⾏时并不会报错,MY PAT H "echo "MY PAT H 1=
if的典型应⽤
判断⽂件是否存在。(-f),注意[]⾥⾯前后都有空格,不能省略。
判断⽬录是否存在 (-d)
判断字符串是否相等(“str1” = “str2”),注意⽤⼀个等号⽽不是两个
判断数字是否相等(-eq)、⼤于(-gt)、⼩于(-lt)、⼤于等于(-ge)、⼩于等于(-le) 回忆⼀下在ARM裸机中讲述ARM汇编条件执⾏时,曾经⽤过这些条件判断的缩写。(eq就是equal,gt就是gre
ater than,lt就是less than,ge就是greater or equal,le就是less or equal)
判断字符串是否为空(-z)注意-z判断时如果变量本⾝没定义也是不成⽴(也就是说-z认为没定义不等于为空)
if判断式中使⽤“-o”表⽰逻辑或
相当于C语⾔中在if后⾯的条件式中⽤逻辑与、逻辑或来连接2个式⼦,最终的if中是否成⽴取决于2个式⼦的逻辑运算结果
#!/bin/sh
# comment
#简写if
[ "awbc" = "abc" ] || echo "ok1"
[ "abc" = "abc" ] && echo "ok2"
#-z判断字符串是否空
str=""
if [ -z $str ]; then
echo "yes"
else
echo "no"
fi
# -eq -gt -lt -ge -le
if [ 21 -gt 2 ]; then
echo "yes"
else
echo "no"
fi
#判断字符串
str="aaboot"
if [ $str = "aboot" ]; then
echo "yes"
else
echo "no"
fi
#-o 表⽰逻辑或
if [ 1234 -eq 123 -o "abc4" = "abc" ]; then
echo "yes"
else
echo "no"
fi
#判断⽂件是否存在
#if [ -f ./ ]; then
#echo "yes"
#else
#test2 当前⽬录下在创建dir并创建a.txt
#mkdir dir
#cd dir
#
#cd ..
#fi
for循环,while循环
echo的创建和追加输⼊⽂件
1. 在shell中可以直接使⽤echo指令新建⼀个⽂件,并且将⼀些内容传⼊这个⽂件中。创建⽂件并输⼊内容的关键就是>
2. 还可以使⽤echo指令配合追加符号>> 向⼀个已经存在的⽂件末尾追加输⼊内容。
脚本案例
在linux⽬录中新建run.sh脚本⽂件(该run.sh脚本⽂件放在webSpider.jar包所在⽬录下)
#!/bin/bash //此脚本使⽤/bin/bash来解释执⾏
. /etc/profile
. ~/.bash_profile//设置环境变量
proc_name="webSpider.jar" # 进程名
file_name="bindmonitortest.log" # ⽇志⽂件
pid=0
proc_num() # 计算进程数
{
num=`ps -ef | grep $proc_name | grep -v grep | wc -l`
return $num
}
proc_id() # 进程号
{
pid=`ps -ef | grep $proc_name | grep -v grep | awk '{print $2}'`
}
proc_num
number=$?
if [ $number -eq 0 ]# 判断进程是否存在
then
nohup java -jar webSpider.jar >webSpider.log 2>&1 &
# 重启进程的命令,请相应修改
proc_id # 获取新进程号
echo ${pid}, `date` >> $file_name # 将新进程号和重启时间记录
fi
0、!、、
补充说明:(1)Shell脚本中?、*、KaTeX parse error: Expected 'EOF', got '#' at position 1: #、@等的意义以及linux命令执⾏返回值意义
$$
Shell本⾝的PID(ProcessID,即脚本运⾏的当前进程ID号)
$!
Shell最后运⾏的后台Process的PID(后台运⾏的最后⼀个进程的进程ID号)
$?
最后运⾏的命令的结束代码(返回值)即执⾏上⼀个指令的返回值
$-
显⽰shell使⽤的当前选项,与set命令功能相同
$*
所有参数列表。如"$*“⽤「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数,此选项参数可超过9个。
$@
所有参数列表。如"$@“⽤「”」括起来的情况、以"$1" “n” 的形式输出所有参数。
*类似,但是可以当作数组⽤
$#
添加到Shell的参数个数
$0
Shell本⾝的⽂件名
n
添加到Shell的各参数值。$1是第1参数、$2是第2参数…。
####(2)#!/bin/bash 含义:
告诉操作系统, 此脚本的解释器为 /bin/bash 这个可执⾏⽂件。类似地, 如果你的脚本⽤ sh, ksh, 解释, 第⼀⾏就应该是
#!/bin/sh,#!/bin/ksh之类的。或者, 你⾃⼰定义⼀种脚本语⾔, 再⾃⼰写个解释器去执⾏,⽐如说叫 xshell, 放在 /usr/local/bin 下, 你的脚本第⼀⾏就应该是#!/usr/local/bin/xshell
如果没有这样定义的第⼀⾏, 不同 unix 类操作系统会⽤默认 shell 来解释脚本, 如 unix 往往是 sh, linux 往往是⽤ bash, …
(3)~/.bash_profile
每个⽤户都可使⽤该⽂件输⼊专⽤于⾃⼰使⽤的shell信息,当⽤户登录时,该⽂件仅仅执⾏⼀次!默认情况下,他设置⼀些环境变量,执⾏⽤户的.bashrc⽂件。
~/.bashrc: 该⽂件包含专⽤于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该⽂件被读取。
crontab 【说明:crontab 是⽤来让使⽤者在固定时间或固定间隔执⾏程序之⽤】
linux循环执行命令脚本什么是crontab
crond 是linux下⽤来周期性的执⾏某种任务或等待处理某些事件的⼀个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务 ⼯具,并且会⾃动启动crond进程,crond进程每分钟会定期检查是否有要执⾏的任务,如果有要执⾏的任务,则⾃动执⾏该任务。
Linux下的任务调度分为两类,系统任务调度和⽤户任务调度。
系统任务调度:系统周期性所要执⾏的⼯作,⽐如写缓存数据到硬盘、⽇志清理等。在/etc⽬录下有⼀个crontab⽂件,这个就是系统任务调度的配置⽂件。
注意: 修改/etc/crontab这种⽅法只有root⽤户能⽤,这种⽅法更加⽅便与直接直接给其他⽤户设置计划任务,⽽且还可以指定执⾏shell 等等
2"…"@跟1~
以上配置解释
1. 代表⽤bash去执⾏shell command line
2.代表crontab 默认的环境变量
2. crontab配置⽂件
⽤户任务调度:⽤户定期要执⾏的⼯作,⽐如⽤户数据备份、定时邮件提醒等。⽤户可以使⽤ crontab ⼯具来定制⾃⼰的计划任务。所有⽤户定义的crontab ⽂件都被保存在 /var/spool/cron⽬录中。其⽂件名与⽤户名⼀致。
注意 : crontab -e这种所有⽤户都可以使⽤,普通⽤户也只能为⾃⼰设置计划任务
crontab⽂件
crontab⽂件包含送交cron守护进程的⼀系列作业和指令。每个⽤户可以拥有⾃⼰的crontab⽂件;同时,操作系统保存⼀个针对整个系统的crontab⽂件,该⽂件通常存放于/etc或者/etc之下的⼦⽬录中,⽽这个⽂件只能由系统管理员来修改。
crontab⽂件的含义
⽤户所建⽴的crontab⽂件中,每⼀⾏都代表⼀项任务,每⾏的每个字段代表⼀项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执⾏的命令段,格式如下:
minute hour day month week command
其中:
minute: 表⽰分钟,可以是从0到59之间的任何整数。
hour:表⽰⼩时,可以是从0到23之间的任何整数。
day:表⽰⽇期,可以是从1到31之间的任何整数。
month:表⽰⽉份,可以是从1到12之间的任何整数。
week:表⽰星期⼏,可以是从0到7之间的任何整数,这⾥的0或7代表星期⽇。
command:要执⾏的命令,可以是系统命令,也可以是⾃⼰编写的脚本⽂件。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论