Shell脚本基本要求

脚本以#!/bin/bash开头(这是一种约定俗成)

脚本需要有可执行权限

脚本文件名称以.sh结尾

Shell的变量

Linux Shell中的变量分为,系统变量和用户自定义变量。

系统变量:$HOME、$PWD、$SHELL、$USER等等,比如:echo $HOME等等.

显示当前shell中所有变量:set

定义变量的规则

  1. 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。5A=200(×)

  2. 等号两侧不能有空格

  3. 变量名称一般习惯为大写,这是一个规范,我们遵守即可

将命令的返回值赋给变量

  1. A=date反引号,运行里面的命令,并把结果返回给变量A

  2. A=$(date)等价于反引号

定义变量:变量名=值

撤销变量:unset 变量

声明静态变量:readonly 变量

注意:A=date是字符串复制  A=`date` 是表达式结果赋值

设置环境变量

export 变量名=变量值:将shell变量输出为环境变量

source配置文件:让修改后的配置信息立即生效

echo $变量名:查询环境变量的值

注意:在输出TOMCAT_HOME环境变量前,需要让其生效source /etc/profile

位置参数变量

当我们执行一个shel脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变

量。

比如:-/myshell.sh 100 200,这个就是一个执行shel的命令行,可以在myshell脚本中获取到参

数信息

$n:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如$(10})

$*:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体

$@:这个变量也代表命令行中所有的参数,不过@把每个参数区分对待

$#:这个变量代表命令行中所有参数的个数

预定变量

就是shel设计者事先已经定义好的变量,可以直接在shell脚本中使用

$$:当前进程的进程号(PID)

$!:后台运行的最后一个进程的进程号(PID)

$?:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。

运算符

“$((运算式))”或“[运算式]”或者expr m+n//expression表达式

注意expr运算符间要有空格,如果希望将expr的结果赋给某个变量,使用“

expr m -n

expr Y*,/,%乘,除,取余

常用的应该是$[运算式] 这种方法

列子:(1+2)*3=$[(1+2)*3]

流程控制与条件判断

  • 条件判断

[ condition ] (注意condition前后要有空格)

非空返回true,可使用$?验证 ( 0为true,>1为false )

√应用实例

[hspEdu]:返回true

[]:返回false

[ condition ] && echo OK ll echo notok:条件满足,执行后面的语句

字符串比较

=:等于

两个整数的比较

It:小于

le:小于等于

eq:等于

gt:大于

ge:大于等于

ne:不等于

按照文件权限进行判断

r:有读的权限

w:有写的权限

x:有执行的权限

按照文件类型进行判断

f:文件存在并且是一个常规的文件

e:文件存在

d:文件存在并是一个目录

  • 流程控制(判断)

# if判断
if [ condition  ]
then
	代码...
fi

# 多分支
if [ condition ]
then
	代码...
elif [ condition ]
then
	代码...
fi

# case
case $变量名 in
"值1")
	等于值1,执行代码
;;
"值2")
	等于值2,执行代码
;;
*)
	前面都判断失败,就执行此代码
;;
esac

  • 流程控制(循环)

# for循环1
for 变量 in 值1 值2 值3...
do
	代码...
done

# for循环2
for (( 初始值;循环控制条件;变量变化 ))
do
	代码...
done

#while循环
while [ 条件判断 ]
do
	代码...
done

流程控制

●if判断

√基本语法

f[条件判断式]

then

代码

fi

或者,多分支

if[条件判断式]

·then

代码

elif [条件判断式]

then

代码

fi