1、Shell编程
应用程序 ===》shell :命令显示器===》内核 linux ===》硬件
用户可以用shell来启动、挂起,甚至编写一些程序
脚本格式要求:
- 以#!/bin/bash开头
- 脚本需要有可执行权限
#!/bin/bash
echo "hello world!"
脚本的常用执行方式
方式1 输入脚本的绝对路径或相对路径 推荐
- 要赋予脚本+x权限 chmod 744 xxx.sh
- 执行脚本./xxx.sh (相对路径) ./root/home/myshell/xxx.sh(绝对路径
方式2 不用赋予脚本+x权限,直接执行
- sh ./xxx.sh
shell的变量
1)变量分为系统变量和用户自定义变量
2)系统变量:$Home $PWD $SHELL $USER 等等
3)显示当前shell中所有变量 :set
输出系统变量
shell变量的定义
基本语法
- 定义变量:变量=值
- 撤销变量:unset 变量
- 申明静态变量: readonly变量, 不能unset
把一个变量提升为全局环境变量,可供其他shell使用(类似系统变量)
变量定义规则
- 变量名称可以由字母、数字和下划线组成,但是不能以数字开头
- 等号两侧不能有空格
- 变量名称一般为大写
将命令的返回值赋值给变量
- A=`ls -la` 反引号 ,运行里面的命令,并把结果返回给变量A
- A=$(ls -la) 等价于反引号
设置环境变量
- 变量名=变量值 (功能描述:将shell变量输出为环境变量)
- source 配置文件 (功能描述:让修改后的配置信息立即生效)
- echo $变量名 (功能描述:查询环境变量的值)
快速入门
1、在/etc/profile文件中定义 TOMCAT_HONE环境变量
- source /etc/profilewie
- 重启系统或者注销用户(成本高)
2、查看环境变量 TOMCAT_HONE的值
3、在另外一个shell程序中使用TOMCAT_HONE
注意:在输出JAVA_HOME环境变量前,需要让其生效 source /etc/profile
位置参数变量 获取命令行中的参数信息
基本语法
- $n (n为数字,$0代表命令本身 $1-$9代表第一到第九个参数,十以上的参数需要用大括号${10})
- $*(这个变量代表命令行中所有的参数 $* 把所有的参数看成一个整体)
- $@(这个变量也代表命令行中所有的参数)
- $# (代表命令行中所有参数的个数)
预定义变量 事先已经定义好的变量,可以直接在shell中使用
- $$(当前进程的进程号PID)
- $! (后台运行的最后一个进程号PID)
- $? (最后一次执行的命令的返回状态,如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值非0.证明上一个命令执行不正确)
运算符
- "$((运算式))" 或 "$[运算式]"
- expr m+n
- expr m-n
- expr \*,/,% 乘,除,取余
注意expr运算符间要有空格
条件判断
[ condition ] ( 注意condition前后有空格)
#非空返回true 可使用$?验证(0为true , >1为false)
判断语句
两个整数的比较
- =字符串比较
- -lt 小于
- -le 小于等于
- -eq 等于
- -gt 大于
- -ge 大于等于
- -ne 不等于
按照文件类型进行判断
- -f 文件存在并且是一个常规的文件
- -e 文件存在
- -d 文件存在并是一个目录
流程控制
- if [ 条件判断 ] ;then
- 程序
- fi
或者
- if [ 条件判断 ]
- then
- 程序
- elif [ 条件判断 ]
- then
- 程序
- fi
case
- case $变量名 in
- "值1")
- 如果变量的值等于值1,则执行程序1
- ;;
- "值2")
- 如果变量的值等于值2,则执行程序2
- ;;
- *)
- 如果值为其他,则执行程序3
- ;;
- esac
for循环
- for 变量 In 值1 值2 值3.。
- do
- 程序
- done
- for ((初始值;循环控制变量;变量变化))
- do
- 程序
- done
while循环
- while [条件判断式]
- do
- 程序
- done
read 读取控制台输入
read [选项][参数]
- -p 指定读取值时的提示符;
- -t 指定读取值时的等待的时间,如果没有在指定时间输入,就不在等待了
函数
basename基本语法 返回完整路径 最后/的部分,用户获取文件
- basename[pathname][suffix]
- basename[string][suffix]
- suffix 为后缀,如果suffix被指定了,basename 将会pathname或string中的suffix去掉
dirname 返回完整路径最后 /的前面的部分,常用于返回路径部分
自定义函数
- [ function ] funname[()]
- {
- action;
- [return int;]
- }
调用直接写函数名
综合案例
crontab -e
10 2 * * * /user/sbin/mysql_db_backup.sh