Shell 脚本学习记录
Shell脚本基本要求
脚本以#!/bin/bash开头(这是一种约定俗成)
脚本需要有可执行权限
脚本文件名称以.sh结尾
Shell的变量
Linux Shell中的变量分为,系统变量和用户自定义变量。
系统变量:$HOME、$PWD、$SHELL、$USER等等,比如:echo $HOME等等.
显示当前shell中所有变量:set
定义变量的规则
变量名称可以由字母、数字和下划线组成,但是不能以数字开头。5A=200(×)
等号两侧不能有空格
变量名称一般习惯为大写,这是一个规范,我们遵守即可
将命令的返回值赋给变量
A=date反引号,运行里面的命令,并把结果返回给变量A
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