Shell是一门批处理脚本编程语言。java
批处理是什么?linux
操做系统都分为(GUI)图形界面,命令界面(command)。shell
命令操做的能够不用一一条执行。能够组命令同时执行。咱们将多条命令同时执行的操做称为批处理。数据库
什么是脚本编程语言。express
--JavaScript脚本语言。必须须要依赖浏览器才能够执行。因此浏览器就是JavaScript的宿主程序。apache
--SQL脚本语言,必须须要数据库启动了才能够执行,SQL语言的宿主是数据库编程
--Shell脚本语言,必须依赖linux的系统。linux系统就是它宿主程序。windows
shell脚本,是批处理的程序,因此也可使用任何的linux命令浏览器
shell脚本,是一门脚本语言,因此它不须要编译直接执行tomcat
shell脚本是一门编程语言,必须符合编写语言的特征。变量,常量,标识符,注释,判断,循环
问题:linux是有多种shell的语言的。如,bash shell csh 等。为何有多种?
答:缘由是linux是一个开源的操做系统。不一样的人均可以对它进行制定。功能稳定后能够提交合并到主核中。
#!/bin/bash ##指定使用的shell是bash shell
##输出hello world echo “hello world”
##这是一行注释 |
bash shell的注释是使用#,但咱们建议使用##号。
需求:使用root,在~目录的shell文件里面,建立一个 demo.sh 的shell脚本。输出hello world
变量分为系统变量与用户自定义变量。
所谓的系统变量就Linux系统自带的变量。
|
如:$PWD,$USER这种Linux系统自带的变量,咱们称为系统变量。以及咱们在profile设置的变量。
需求:输出系统变量PWD
使用 echo $PWD。
访问变量使用$访问,无论是系统变量函数,用户自定义变量。
变量=值 (例如STR=abc)
等号两侧不能有空格
变量名称通常习惯为大写(无论学任何编程语言,保持语法风格和API的一致)
使用变量: $STR
注意:若是值是有空格等特殊字符串,必须有使用双引号或者单引号。
双引号仅将空格脱意,
单引号会将变量引用好比$param脱意
使用命令 a=aaa 2.设置变量 b= “$a bbb” --仅将空格脱意的意思是指,除了空格字符串输出,其余的有特殊含义的字符仍是转义输出的 3.若是设置的变量b = ‘$a bbb’ --变量引用脱意,全部的空格以及引用都字符串输出
|
当前shell有效的变量,当前shell文件内部调用
不加 export的变量就是当前shell有效的变量,若是在一个shell脚本里面
声明一个STR=aaa,子shell脚本不能够调用该变量!!
若是加一个shell脚本里面声明的变量使用了export。表示全局变量,子shell脚本能够调用。
--编写一个demo-03.sh
|
--编写一个demo-04.sh
|
--执行demo-03.sh,能够输出
|
echo `ls -l` 。反单引号,就是Tab键的上一个键。
A=`ls -la` ## 反引号,运行里面的命令,并把结果返回给变量A
A=$(ls -la) ## 等价于反引号
$? 表示上一个命令退出的状态码
状态码 |
描述 |
0 |
命令成功结束 |
1 |
通用未知错误 |
2 |
误用Shell命令 |
126 |
命令不可执行 |
127 |
没找到命令 |
128 |
无效退出参数 |
128+x |
Linux信号x的严重错误 |
130 |
命令经过Ctrl+C控制码越界 |
255 |
退出码越界 |
$$ 表示当前进程编号
$0 表示当前脚本名称
$n 表示n位置的输入参数(n表明数字,n>=1)
$# 表示参数的个数,经常使用于循环
$*和$@ 都表示参数列表
注:$*与$@区别
$* 和 $@ 都表示传递给函数或脚本的全部参数
ü 不被双引号" "包含时--
$* 和 $@ 都以$1 $2 … $n 的形式组成参数列表
ü 当它们被双引号" "包含时--
"$*" 会将全部的参数做为一个总体,以"$1 $2 … $n"的形式组成一个整串;
"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式组成一个参数列表
需求:编写一个段脚本。直接输出参数值,以及shell脚本的名字。
#!/bin/bash echo "my file name is $0" echo "param 1 is $1" echo "param 2 is $2" echo "param count is $# " echo "param list $*" echo "param list $@" |
结果
|
--注意:默认状况下,shell的变量都是一个字符串。
--如何让字符串均可以运算呢?
答:可使用expr命令。
--注意事项:运算符之间必需要有空格。
例如计算(2+3 )×4 的值
--第一步
S=`expr 2 + 3`
--第二步
--注意事项:*在linux里面是一个通配符,因此须要转义
expr $S \* 4
一步完成计算
方案1 :expr `expr 2 + 3` \* 4
--注意;`也是一个特殊字符,表示$()的意思。若是在运算表达式里面,也须要转义
方案2 : echo `expr \`expr 2 + 3\` \* 4`
((C语言语法))里面的表达式,使用标准C语言的语法来操做运算符。
((1+2))
(((2+3)*4))
count=1
((count++))
echo $count
|
通常用于逻辑运算。
a=$[1+2]
echo $a
问题:Shell的语法为何那么奇怪呢?
答:就是当时写系统的临时想出来的解决方案。因此语法语法结构比较古老。
--java 语法
if (condition ){ //statements }else if(condition ){ //statements }else{ //statements } |
语法结构
if condition then //statements elif condition then //statements else //statements fi |
示例:
需求:编写程序,若是输入的参数为 root 输出欢迎语句,若是参数是sxt也输出欢迎语句
不然,不认识你
#!/bin/bash read -p "please input your name:" NAME ## read命令用于从控制台读取输入数据 ## printf '%s\n' $NAME if [ $NAME = root ] then echo "hello ${NAME}, welcome !" elif [ $NAME = ranger ] then echo "hello ${NAME}, welcome !" else echo "SB, get out here !" fi |
注意事项:
--java的case语法
switch (value) case val1: //statements break; case val2: //statements break; default //statements break; |
语法结构
case <变量> in value1) //逻辑处理 ;; value2) //逻辑处理 ;; *) //逻辑处理 esac |
需求:经过参数传值,若是是start ,输出 starting 若是是 stop ,输出stoping 不然,输出 (start|stop)
示例
case $1 in start) echo "starting" ;; stop) echo "stoping" ;; *) echo "Usage: {start|stop}" esac |
--语法结构
while expression do command … done
|
示例
#!/bin/bash read -p "请输入一个数:" NUM echo "$NUM" i=0 sum=0 while ((i< $NUM)) do ((i++)) sum=$(($sum+$i)) done;
echo "sum is $sum";
|
注意事项:
for N in 1 2 3 do echo $N done 或 for N in 1 2 3; do echo $N; done 或 for N in {1..3}; do echo $N; done
|
for ((i = 0; i <= 5; i++)) do echo "welcome $i times" done 或 for ((i = 0; i <= 5; i++)); do echo "welcome $i times"; done |
tomcat开机启动。
为何很差,这样作,虽然tomcat启动了。可是在服务里面看不见。
需求:让tomcat也可使用service来管理。
--注意,tomcat自己没有提供服务脚本。因此须要咱们自定义实现。
--注意:windows系统的编码linux是不一样。因此从window复制过去的shell是有问题。
能够经过 cat -A <文件确认编码问题>
编写脚本
#!/bin/bash # This is a Tomcat Service # chkconfig: 2345 90 10 # desricption: This is a Tomcat Service export JAVA_HOME=/opt/jdk1.8.0_181/ case $1 in start) echo "Tomcat Service strating...." /opt/apache-tomcat-8.5.34/bin/startup.sh echo "SUCCESS!!!!" ;; stop) echo "Tomcat Service stoping...." /opt/apache-tomcat-8.5.34/bin/shutdown.sh echo "SUCCESS!!!!" ;; *) echo "(start|stop)" esac
|
将脚本复制在 /etc/init.d/目录下,文件名为tomcat
注意:tomcat文件必须有给全部人授予执行的权限
若是成功。可使用
service tomcat start
service tomcat stop
测试。。。
将服务加入到开机启动
chkconfig --add tomcat
查看增长是否成功
chkconfig --list