三、Linux系统-Shell编程

一、Shell简介
Shell是一种具备特殊功能的程序,它提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令,并把它送入内核去执行。内核是Linux系统的心脏,从开机自检就驻留在计算机的内存中,直到计算机关闭为止,而用户的应用程序存储在计算机的硬盘上,仅当需要时才被调入内存。Shell是一种应用程序,当用户登录Linux系统时,Shell就会被调入内存去执行。Shell独立于内核,它是连接内核和应用程序的桥梁,并由输入设备读取命令,再将其转为计算机可以理解的机械码,Linux内核才能执行该命令。
在这里插入图片描述
二、Shell优势
Shell脚本语言的好处是简单、易学、易用,适合处理文件和目录之类的对象,以简单的方式快速完成某些复杂的事情通常是创建脚本的重要原则,脚本语言的特性可以总结为以下几个方面:

语法和结构通常比较简单。
学习和使用通常比较简单,
通常以容易修改程序的“解释”作为运行方式,而不需要“编译。
程序的开发产能优于运行效能。

Shell脚本语言是Linux/Unix系统上一种重要的脚本语言,在Linux/Unix领域应用极为广泛,熟练掌握Shell脚本语言是一个优秀的Linux/Unix开发者和系统管理员必经之路。利用Shell脚本语言可以简洁地实现复杂的操作,而且Shell脚本程序往往可以在不同版本的Linux/Unix系统上通用。

三、Shell编程

1、基本格式
Shell脚本的文件名后缀通常是.sh (当然你也可以使用其他后缀或者没有后缀,.sh是为了规范)

//固定格式,记住就可以了
#!/bin/bash
//注释方式如下
# 注释使用#号
//执行的代码
echo Hello World

2、赋权并执行
//赋予可执行权限
chmod +x a.sh

//执行(调用/bin/bash执行a.sh脚本)
【1】a.sh
》》前提:这样的话需要保证脚本具有执行权限并且在环境变量PATH中有(.),这样在执行的时候会先从当前目录查找。
在这里插入图片描述
【2】./a.sh
》》前提:只要保证这个脚本具有执行权限即可。

【3】bash a.sh
》》直接可以执行,甚至这个脚本文件中的第一行都可以不引入/bin/bash,它是将hello.sh作为参数传给bash命令来执行的。

3、变量
变量不需要声明,初始化不需要指定类型

【1】变量命名

1)只能使用数字,字母和下划线,且不能以数字开头

2)变量名区分大小写

3)建议命令要通俗易懂

注意:变量赋值是通过等号(=)进行赋值,在变量、等号和值之间不能出现空格。

显示变量值使用echo命令(类似于java中的system.out) ,加上变量名,也可以使用

{变量名}

例如:
echo $JAVA_HOME
echo ${JAVA_HOME}

【2】变量分类
hell变量有这几类:本地变量、环境变量、局部变量、位置变量、特殊变量。
1)本地变量:

只对当前shell进程有效的,对当前进程的子进程和其它shell进程无效。
定义:VAR_NAME=VALUE
变量引用:VARNAME或者

VAR_NAME
取消变量:unset VAR_NAME
相当于java中的私有变量(private),只能当前类使用,子类和其他类都无法使用。

2)环境变量:

自定义的环境变量对当前shell进程及其子shell进程有效,对其它的shell进程无效

定义:export VAR_NAME=VALUE

对所有shell进程都有效需要配置到配置文件中

相当于java中的protected修饰符,对当前类,子孙类,以及同一个包下面可以共用。和windows中的环境变量比较类似

3)局部变量:

在函数中调用,函数执行结束,变量就会消失
对shell脚本中某代码片段有效
定义:local VAR_NAME=VALUE
相当于java代码中某一个方法中定义的局部变量,只对这个方法有效。

4)位置变量:

比如脚本中的参数:

$0:脚本自身

$1:脚本的第一个参数

$2:脚本的第二个参数
相当于java中main函数中的args参数,可以获取外部参数。

5)特殊变量:

$?:接收上一条命令的返回状态码  返回状态码在0-255之间

$#:参数个数

∗:或者

@:所有的参数

$$:获取当前shell的进程号(PID)(可以实现脚本自杀)(或者使用exit命令直接退出也可以使用exit [num])

4、引号
Shell编程中有三类引号:单引号、双引号、反引号。
1)”单引号不解析变量

echo ‘$name’  

2)“”双引号会解析变量

 echo “$name”

3)“反引号是执行并引用一个命令的执行结果,类似于$(…)

echo `$name`  

示例:
在这里插入图片描述

5、循环
【1】for循环

通过使用一个变量去遍历给定列表中的每个元素,在每次变量赋值时执行一次循环体,直至赋值完成所有元素退出循环
1)格式一

for ((i=0;i<10;i++))
do

Done

  1. 格式二

for i in 0 1 2 3 4 5 6 7 8 9
do

Done

  1. 格式三

for i in {0…9}
do

done

注意:for i in {0…9} 等于for i in {0…9…1} , 第三个参数为跨步。

例如:

{0…9…2} 表示 0,2,4,6,8

【2】while循环

适用于循环次数未知,或不便用for直接生成较大的列表时
格式:

while 测试条件
do
循环体
done

如果测试条件为“真”,则进入循环,测试条件为假,则退出循环。

在这里插入图片描述
打印结果为0~9.

6、循环控制
【1】循环控制命令——break

break命令是在处理过程中跳出循环的一种简单方法,可以使用break命令退出任何类型的循环,包括while循环和for循环

【2】循环控制命令——continue

continue命令是一种提前停止循环内命令,而不完全终止循环的方法,这就需要在循环内设置shell不执行命令的条件

7、条件
【1】if判断:
1)单分支

if 测试条件;then
选择分支
fi

2)双分支

if 测试条件
then
选择分支1
else
选择分支2
fi

3)多分支

if 条件1; then
分支1
elif 条件2; then
分支2
elif 条件3; then
分支3

else
分支n
i

示例:
在这里插入图片描述
【2】Case判断
有多个测试条件时,case语句会使得语法结构更清晰
格式:

case 变量引用 in
PATTERN1)
分支1
;;
PATTERN2)
分支2
;;

*)
分支n
;;
esac

8、比较运算符
整型比较:

      -gt:大于:

      -lt:小于

      -ge:大于等于

      -le:小于等于

      -eq:等于

      -ne:不等于

字符串比较:

=:等于,例如判断变量是否为空 [ “str”=””]或者[−z str ]

!=:不等于

打印结果:

在这里插入图片描述

9、逻辑运算符

if [ 条件A && 条件B ] 在shell中怎么写?

if [ 条件A && 条件B ];then 是不对的

》》应该如下:
-a 与
-o 或
! 非

如if [ 条件A -a 条件B ]

10、自定义函数
1)格式:

function 函数名(){

}

引用自定义函数文件时,使用source func.sh
有利于代码的重用性
函数传递参数(可以使用类似于Java中的args,args[1]代表Shell中的$1)
函数的返回值,只能是数字
在这里插入图片描述

2)函数的调用:
在这里插入图片描述

应用示例:
(1)项目启动与停止脚本
【1】start_dc_rmp.sh代码如下:

#!/bin/bash
JAVA_HOME="/usr/local/jdk1.7"
CLASSPATH=".:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH"
DEP_PATH="/usr/local/dc-rmp-server"
nohup $JAVA_HOME/bin/java -Xms128M -Xmx343M -XX:PermSize=128m -XX:MaxPermSize=256m -server -jar dc-rmp-server.jar >/dev/null 2>&1 & 

【2】stop_dc_rmp.sh代码如下:

#!/bin/bash
JarName=dc-rmp-server
PID=`ps -ef|grep $JarName|grep -v grep|awk '{print $2}'` 
#echo $PID         
kill -9 $PID
echo "kill -9 $PID"

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值