Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。
正则表达式
在学习shell编程要有一定的正则表达式的基础知识。
符号 含义 举例
^ 开始标记 "^abc"满足的例子abc
^ 非(在[]内) "[^abc]"满足例子:ddd、mpd
$ 结束标记 "abc$"满足例子:abc,mmabc
\ 匹配转义后的字符串
. 任意字符 "a.c"满足例子:abc,abcd
\< 匹配单词开始 "\<abc"满足的例子abc、abcd
\> 匹配单词结束 "abc\>"满足的例子abc,pmrabc
| 或 "AAA|BBB"满足例子:AAA,BBBpp
? 匹配前一个字符0或1次 "abc?"满足的例子ab、mabcd
好* 匹配钱一个字符>=0次 “abc*”满足的例子:abbb
好+ 匹配前一个字符>=1次
{} {m}{m,n}{m,}{,n}分别匹配钱一个字符m次、m到n次、>=m次、<=n次
[] []范围内选其一,比较特殊的[0-9]代表数字,[a-z]代表小写字母
() 将候选的所有元素放在()内,用|分隔开 "a(1|2|3)b"满足的例子a1b
shell编程
- shell 变量
环境变量:用于爆粗能操作系统运行时使用的环境变量,用set命令查看
可分为用户环境变量(.bash_profile)和系统环境变量(/etc/profile)
位置变量 :将传递给脚本的参数保存在位置变量中,以便于在脚本中引用这些参数
其中Bash定义了9个位置变量,分别是$1 ….脚本编写者在脚本中引用这9个变量,获取传递给脚本的参数
注意:
$1 位置参数
$0 脚本名称
shell算术运算
“+”“-” “*”“/”“%”
使用方法
- $((experssion))
- $[expression]
expr expression
举例
- $((5+4))
- expr 5/4
注意:expr要有空格 # expr 5 + 2
shell内置测试判断
举例1
[] 方式最常见 注意:测试表达式与中括号之间一定要有空格
举例2
例子3
注意 字符串一定要打引号
Data
- Date –s “2017-06-19 07:30:13” 修改系统时间(临时)
- Date ‘+%Y%m%d’ 20170609 输出时间 按年月日
- Date –d ‘7 day ago’ ‘+%Y%m%d’ 输出7天前的日期
脚本案例
#!bin/bash 声明环境
#test 以#开头的部分全部表示注释
#shell脚本从上往下依次执行
date
grep 'root' /etc/passwd
执行Shell脚本
添加权限命令: chmod 744 1.sh
./1.sh (./ 表示当前目录)
. /temp/1.sh 表示执行这个文件
控制语句
for
举例1:
例子2
#!/bin/bash
for i in {1..10}
do
mkdir /home/zxq/shell/test/dir$i
done
#!/bin/bash
for i in ‘seq 50’ #反应好代表命令预先执行
do
mkdir /home/zxq/shell/test/dir$i
done
#!/bin/bash
For((i=1;i<=10;i++))
Do
Sum=$((SUM+1))
Done
Echo $SUM
while
#!/bin/bash
i=1
while [ $i –le 10 ] #注意空格
do
SUM=$((SUM+i))
i=$[i+1]
done
echo $SUM
读取文件
#!/bin/bash
while read –r line #read 逐行读取
do
echo $line
done < /etc/passwd # < 后面接文件
if
#!/bin/bash
if [ 3 –eq 3 ] #注意 if后面要有空格 [] 也要有空格
then
echo yes
fi
case
#!/bin/bash
case $1 in
top)
top
;;
free)
free
;;
df)
df
;;
*)
echo "usage:$0{top|free|df}"
esac
Shell 函数
#!/bin/bash
sum(){
echo $(($1+$2))
}
sum 5 6
计划任务
一次性的计划任务
周期性的计划任务
crontab
1)确保服务启动
service crond status
chkconfig --list
2)制定计划任务内容
Crontab –e
和vi界面一样进行输入 * * * * * cmd 前面五列表示时间用空格分开
例如:
0 2 * * 3 cp /etc/passwd /tmp
每周三凌晨2点备份文件/etc/passwd 到tem文件夹中
5 1 10,25 * * rm –rf /tmp/*
每个月10号和25号凌晨1点5分执行(没半个月清空一次tmp)
*/10 * * * * ntpdata 时间服务器IP
每10分钟执行时间同步
0 1-6 * * *
每天1点到6点执行
3)重启crond服务
service crond restart