Shell是一个命令解释器,它可以为用户提供一个向Linux内核发送请求以便运行程序的界面系统程序,用户可以通过Shell来启动、挂起、停止甚至是编写一些程序。
1. Shell编程快速入门
要求:
- 脚本以#!/bin/bash开头
- 脚本需要可执行权限
执行方式:
- 赋予xxx.sh脚本+x权限,执行脚本
chmod 755 xxx.sh
./xxx.sh
- 不用赋予+x权限,直接执行
sh ./xxx.sh
2. Shell变量
Shell变量主要分为系统变量和自定义变量
系统变量
$HOME
、$PWD
、$SHELL
和$USER
等
自定义变量
- 定义变量:
变量=值
(中间不能有空格)
撤销变量:unset 变量
- 定义静态变量:
readonly 变量=值
(静态变量不能unset) - 把自定义变量升为系统变量,供其他脚本使用:
- 将命令的返回值赋值给变量:
1.A=‘ls -l’
:运行里边的命令,并把结果返回给变量A(‘表示反引号,esc的下方那个键)
2.A=$(date)
:等价于反引号
3. 设置环境变量
-
expert 变量名=变量值
:将shell变量输出为环境变量 -
source 配置文件
:让修改后的配置信息立即生效 -
echo 变量名
:查询环境变量的值
4. 位置参数变量
在执行shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量
./myShell.sh 100 200
:执行shell的命令,可以在myShell脚本中获取到参数信息100 200
-
$n
:n
为数字,$0
代表命令本身,$1
-$9
代表第一到第九个参数,10
以上的参数需要用大括号包含,如${10}
。 -
$*
:这个变量代表命令行中所有的参数,$*
把所有的参数看成一个整体 -
$@
:这个变量也代表命令行中所有的参数,&@
把每个参数区分对待 -
$#
:这个变量代表命令行中所有参数的个数
bash:
输出:
5. 预定义变量
shell设计者预先定义好的变量,可以直接在shell中使用
-
$$
:当前进程的进程号(PID) -
$!
:后台运行的最后一个进程的进程号(PID) -
$?
:最后一次执行的命令的返回状态,如果这个变量的值为0,证明上一个指令已经执行;如果这个变量非0,则证明上一个命令执行不争取。
bash:
输出:
6. 运算符
基本语法:
-
$((运算式))
或$[运算式]
-
expr m + n
(expr运算符间要有空格)
运算符:
1.\*
:乘
2./
:除
3.%
:取余
bash:
输出:
7. 条件判断
基本语法:
[ condition ]
(注意:condition前后要有空格)
非空返回true
,可使用$?
验证(0
为true
,>1
位false
)
[ atguigu ]
:返回true
[]
:返回false
常用判断条件
- 两个整数的比较
=
:字符串比较
-lt
:小于(less than:lt)
-le
:小于等于(less equal:le)
-q
:等于
-gt
:大于(greater than:gt)
-ge
:大于等于
-ne
:不等于(not equal:ne) - 按照文件权限进行判断
-r
:有读的权限
-w
:有写的权限
-x
:有执行的权限 - 按照文件类型判断
-f
:文件存在并且是一个常规文件
-e
:文件存在
-d
:文件存在并且是一个目录
bash:
输出:
8. 流程控制
if语句
-
if [ 条件判断 ];then
程序
fi
-
if [ 条件判断 ]
then
程序
elfi [ 条件判断 ]
then
程序
fi
编写一个shell程序,如果输入的参数大于等于60,则输出“及格了”,如果小于60,则输出“不及格”。
case语句
基本语法:
case $变量名 in
"值1")
如果变量值等于1,则执行程序1
;;
"值2")
如果变量值等于2,则执行程序2
;;
"值3")
如果变量值等于3,则执行程序3
;;
esac
当命令行参数是1时,输出“周一”;是2时,输出“周二”;其它情况输出“other”。
for循环
-
for 变量 in 值1 值2...
do
程序
done
-
for ((初始值; 循环控制条件; 变量变化))
do
程序
done
使用第一种方式打印命令行的输入参数
使用第二种方式将1加到100的值输出显示
while循环
while [ 条件判断 ]
do
程序
done
从命令行输入一个数,统计从1+...+n的值是多少?
9. read读取控制台输入
基本语法:
read [选项] 参数
-p
:指定读取值时的提示符
-t
:指定读取值时等待的时间(秒),如果没有在指定时间内输入,则不再等待了。
变量:指定读取的变量名
读取控制台输入的number
10. 函数
shell里有系统函数和自定义函数
系统函数
-
basename [pathname] [suffix]
删掉所有的前缀包括最后一个/
字符,然后将字符串显示出来
suffix
为后缀,如果suffix
被制定了,basename
会将pathname
或string
中的suffix
去掉。 -
dirname [pathanme]
返回完整路径最后/
的前面部分,常用于返回路径部分
自定义函数
[ function ] funname[()]
{
程序;
[return int;]
}
调用直接写函数名:funname [值]
计算两个数的和
11. Shell编程实例
需求:
- 每天凌晨2:10备份数据库atguiguDB到/data/backup/db
- 备份开始和备份结束给出相应的提示信息
- 备份后的文件要求以备份时间命名,并打包成.tar.gz
- 在备份时,检查是否有10天前的备份,如果有就删除
编写crontab执行脚本:
crontab -e
10 2 * * * /usr/sbin/mysql_backup_db.sh
网友评论