Shell编程基础知识
Shell编程
Shell相当于翻译官,作为用户和Linux系统内部的通信媒介。
Shell 的使用
查看当前的shell:echo $SHELL(默认是Bash)
编写脚本:vim example.sh
1 |
|
3.执行脚本:bash example.sh
Shell的变量
- 系统变量:
$HOME
,$PWD
,$SHELL
,$USER
等
eg : echo $HOME
查看当前shell中所有变量的值: set
- 自定义变量:
定义变量: 变量=值 (等号两边不要有空格,默认是字符串)
eg : c=1+1
- 撤销变量:unset 变量
Eg: unset c
声明静态变量:readonly 变量 (不能unset撤销)
全局变量:export 变量名
- 特殊变量
- 特殊变量$n
n为数字,$0是脚本名称,$1-$9代表第一到第九个参数,十以上的参数要大括号,列入${10}
- 特殊变量 $#
获取所有输入的参数(常用于循环)
- 特殊变量 $* , $@
$* :表示命令行中所有参数,$*把所有参数看成一个整体
$@:表示命令行中所有参数,$@把每个参数区别对待
例如:
识别参数
Vim example.sh
1
2
3
4
5
#!/bin/bash
echo “当前脚本名称为$0”
echo “总共有$#个参数,分别是$*。”
echo “第一个参数为$1,第五个为$5。”
echo “所有参数有$*,$@”
- 特殊变量 $?
$? : 最后一次执行的命令的返回状态,正确执行后返回0,不正确执行返回非0。
Shell的运算符
$[运算式]
expr +,-,*,/ ,% 加减乘除,取余 (注意空格)
eg: 计算2+3 :expr 2 + 3
计算(2+3)X 4 : expr expr 2 + 3
* 4
S = $[(2+3)*4]
Shell的条件判断
用条件测试语法判断表达式是否成立,条件成立就返回0;不成立就返回1。
测试语句表达式: [ 条件表达式 ] (注意红色为空格)
条件测试语句分为四种:
文件测试语句;
逻辑测试语句;(&&, ||, ! )
整数值比较语句;
字符串比较语句。
文件测试所用的参数
-d | 测试文件是否为目录 |
---|---|
-e | 测试文件是否存在 |
-f | 判断是否为一般文件 |
-r | 测试当前用户是否有权限读取 |
-w | 测试当前用户是否有权限写入 |
-x | 测试当前用户是否有权限运行 |
例如: [ -d example.sh ] && echo $?
echo $?
返回上条语句的返回值
用&&连接,类似操作有“或||”,“非!”。
整数比较运算符
操作 | 作用 |
---|---|
-eq(equal) | 是否等于 |
-ne(not equal) | 是否不等于 |
-gt(greater than) | 是否大于 |
-lt(less than) | 是否小于 |
-ge | 是否大于等于 |
-le | 是否小于等于 |
字符串比较运算符
= 比较字符串是否相同
!= 比较字符串是否不同
-z 判断字符串内容是否为空
Shell的流程控制
if控制语句
1 | if 条件测试操作 |
嵌套if
1 | if 条件1 |
for条件循环语句
语法:
1 | for 变量名 in 取值列表 |
while条件循环语句
语法:
1 | While 条件 |
Case测试语句
语法:
1 | Case 变量值 in |
Read读取控制台输入
基本语法: read (选项) (参数)
选项: -p :指定读取值的提示符
-t :指定读取值的等待时间
参数:
变量:指定读取值的变量名
例如:提示7s内,读取控制台输入名称
read -t 7 -p “请7S内输入数据” NAME
函数
系统函数
- basename 切断路径
例如: basename /home/sds/example.txt
结果是:example.txt
- dirname 保留路径
例如: basename /home/sds/example.txt
结果是: /home/sds
自定义函数
需要先声明函数
基本语法:
1 | [ function ] funname [()] |
例如:
1 |
|
Shell工具
- cut
cut -d “ ” -f 1 example.txt
(间隔符是“ ”,提取example.txt第一列)
- sed
sed 是一种流编辑器,一次处理一行内容。但是不改变文件内容,除非重定向。
语法 : sed [-e] ‘command’ filename
-e :在指令列模式上进行sed的动作编辑
Command:
a : 新增,a的后面可以接字符串,在下一行出现
d : 删除
s :查找并替换
例如:
Eg 1:把lushan放入example.txt的第二行后面
Eg 2:把example.txt所有含有I的行删除
Eg 3 :把example.txt中的I全部替换成you (+g即为全部替换)
注意原本文件并没有发生改变!
awk
sort
sort 对于文本内容进行排序
用法 :sort [参数] 文件名称
参数如下:
-f 忽略大小写
-b 忽略缩进与空格
-n 以数值型进行排序
-r 反向排序
-u 去除重复行
-t 指定间隔符
-k 设置字段范围
默认是字母顺序进行排序
计划任务服务程序
一次性计划任务
长久性计划任务
一次性计划任务用at命令,格式:at 时间
At 的参数
-f | 指定包含命令的任务文件 |
---|---|
-q | 指定新任务名称 |
-l | 显示待执行任务列表 |
-d | 删除指定待执行任务 |
-m | 任务执行后给用户发邮件 |
Atrm序号 :删除命令
倒计时命令:at now +2 MINUTE(HOUR,DAY,MONTH)
长久性命令crontab
参数
-e 编辑计划任务
-u 指定用户名称
-l 列出任务列表
-r 删除计划任务
参数格式:分,时,日,月,星期,命令(没有设置的时间直接用*代替,0,7均为星期日);