shell
1.查看shell
echo $SHELL
/ 根目录
/bin 存放常用命令
/boot 存放开机文件和启动文件
/dev 存放硬件设备文件和驱动文件
/etc 存放系统服务配置文件
/home 普通用户家目录
/mnt 用来挂载使用的目录
/var 存放日志目录
/lib /lib64 存放系统库文件
/root root用户家目录
/tmp 存放临时文件
/proc 存放进程文件和系统信息
/sbin 存放管理命令
/usr 存放帮助手册和系统应用程序
/opt 存放应用软件
2.变量的设置规则
1,变量名称可以由字母,数字和下划线组成,但是不能以数字开头,环境变量名建议大写,便于区分。
2,在bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型。
3,变量用等号连接值,等号左右两侧不能有空格。
4,变量的值如果有空格,需要使用单引号或者双引号包括。
3.使用
# 定义变量
a=123
b=zs
# 调用标量
$
# 查看变量
echo $a
# 把这两个变量合起来
c=$a$b # 结果为:123zs # 不推荐
c=${a}${b} # 推荐
c="$a""$b" # 推荐 要是双引号
d=$a+$b # 结果为:123+zs
# 环境变量
export 变量名=变量值
作用域:当前shell以及所有的子shell
4.位置参数名
# 注意使用 单''(表示的是字符串) 和 双 ""(会对里面的东西进行翻译一次)
# $n n为数字,$0代表命令本身,$1-$9代表第一到第9个参数,十以上的参数需要用大括号包含,如${10}。
# $* 代表命令行中所有的参数,把所有的参数看成一个整体。以"$1 $2 … $n"的形式输出所有参数
# $@ 代表命令行中的所有参数,把每个参数区分对待。以"$1" "$2" … "$n" 的形式输出所有参数
# $# 代表命令行中所有参数的个数。添加到shell的参数个数
# 编写脚本 2.sh
#!/usr/bin/bash
echo '$0'=$0 # 2.sh
echo '$1'=$1 # a
echo '$2'=$2 # b
echo '\$*'=$* # a b c d e
echo '\$@'=$@ # a b c d e
echo '\$#'=$# # 5
for i in "$*" # a
do # 执行 # b
echo $i # ....
done # 结束
echo '@'
for i in "$@" # a b c d e
do
echo $i
done
# 调用脚本
bash 2.sh a b c d e
# 得到的结果看上面
$* 和 $@的区别
$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号" "包含时,都以"$1" "$2" … "$n" 的形式输出所有参数
当它们被双引号" "包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数
# shift
shift指令:参数左移,每执行一次,参数序列顺次左移一个位置,$# 的值减1,用于分别处理每个参数,移出去的参数不再可用
# 脚本3.sh
#!usr/bin/bash
echo '$1'=$1 # a
echo '$2'=$2 # b
echo '$3'=$3 # c
echo '\$#'=$# # 4
shift # 把第一个参数a移除掉
echo '$1'=$1 # b
echo '\$#'=$# # c
# 执行脚本 bash 3.sh a b c d
# 执行得到的结果上看面
5.预定义变量
# $? 执行上一个命令的返回值,执行成功,返回0,执行失败,返回非0(具体数字由命令决定)
# $$ 当前进程的进程号(PID),即当前脚本执行时生成的进程号
# $! 后天运行的最后一个进程号(PID),最近一个被放入后台执行的进程 &
# 脚本1.sh
#!/usr/bin/bash
pwd
echo '\$?'=$? # 0
echo '\$$'=$$ # 进程号
echo '\$!'=$!
# 执行脚本
bash 1.sh
# 得到结果
# && 和 || 的使用
bash 1.sh && echo $? # 当前面的bash 1.sh执行成功后,后面的echo $?才会执行
bash 2.sh || echo $? # 不管前面的bash 2.sh是否执行成功,后面的echo #?都会执行
bash 2.sh ;echo $? # 和 || 一样
# 组合使用
bash 1.sh && echo success || echo failed
# 当前面的bash 1.sh执行成功,会显示success,不成功会显示failed
5.read的使用
read [选项] 值
read -p(提示语句) -n(字符个数) -t(等待时间,单位为秒) –s(隐藏输入)
# 脚本 read.sh
#!/usr/bin/bash
read -t 30 -p 'please input your name:' name1 name2 # 等待30秒你输入名字,输入后的名字赋值给name
echo $name1 $name2 # 打印name
read -t 30 -sp 'please input your age:' age # 隐藏输入age别人看不到,输入后的年龄赋值给age
echo $age # 打印age
# read2.sh
#!/usr/bin/bash
read -t 30 -p 'please input your name:' name1 name2 # 等待30秒你输入名字,输入后的名字赋值给name1,name2
echo $name1 $name2
read -t 30 -sp 'please input your age:' age
echo $age
read -t 30 -n 1 -p 'please imput your gender[m|f]:' gender # 只能输入一个字符
echo $gender
6.运算符
# 格式:expr m + n 或$((m+n)) 注意 expr 运算符要有空格
expr 命令:对整数型变量进行算术运算
(注意:运算符前后必须要有空格)
expr 3 + 5
expr 3 - 5
echo `expr 10 / 3`
expr 3 \* 5
`expr \`expr 3 + 5\` \* 3`
# 推荐,使用起来方便,不需要转义
$((3 + 5))
$((3 - 5))
$((10 / 3))
$((3 * 5))
$(((3 + 5) * 3))
7.** ( ) ∗ ∗ 与 ()**与 ()∗∗与{}的区别
$()的用途和反引号``一样,用来表示优先执行的命令
echo $(cat a.txt)
${}就是取变量了 echo ${PATH}
$((运算内容))适用于数值运算
echo $((3 + 1 * 4))
8.条件判断test
8.0.test使用
# 内置test美丽常用操作符[]表示,将表达式写在p[]中,如下:
[ expression ] 或者 test expression
注意:expression 首尾都有个空格
[ ];echo $?
测试范围:整数、字符串、文件
表达式的结果为真,则test的返回值为0,否则为非0
当表达式的结果为真时,则变量$?的值就位0,否则为非0
8.1.字符串测试
# 字符串你测试
test str1 == str2 # 测试字符串是否相等
test str1 != str2 # 测试字符串是否不相等
test str1 # 测试字符串是否不为空,不为空,true,false,不为空时返回true
test -n str1 # 测试字符串是否不为空
test -z str1 # 测试字符串是否为空
# 例如
num1=1
num2=2
num3=
test $num1 == $num2;echo $? # 1 表示错误
test $num1 != $num2;echo $? # 0 表示正确
test $num1;echo $? # 0 表示正确,不为空
test $num3;echo $? # 1 表示为空
test -z $num3;echo $? # 0 为空时,表示正确
# []
[ $num1 == $num2];echo $?
8.2.整数测试
# 整数测试
test int1 -eq int2 测试整数是否相等 equals
test int1 -ge int2 测试int1是否>=int2
test int1 -gt int2 测试int1是否>int2
test int1 -le int2 测试int1是否<=int2
test int1 -lt int2 测试int1是否<int2
test int1 -ne int2 测试整数是否不相等
# 例如
[ 13 -ge 12];echo $? # 0 表示正确
[ 13 -ge 15];echo $? # 1 表示不正确
8.3.文件测试
# 文件测试
test -d file 指定文件是否为目录(即是否为文件夹)
test –e file 文件是否存在 exists
test -f file 指定文件是否常规文件(即是否为文件)
test –L File 文件存在并且是一个符号链接 (即是否为一个链接)
test -r file 指定文件是否可读
test -w file 指定文件是否可写
test -x file 指定文件是否可执行
# 例如
[ -d a ];echo $? # 0 表示a是文件件
[ -f 1.txt ];echo $? # 0 表示1.txt是文件
8.4.多重条件测试
# 条件1 –a 条件2 逻辑与 两个都成立,则为真
[ -d a -a -f 1.txt] && echo success || echo failed
# 条件1 –o 条件2 逻辑或 只要有一个为真,则为真
[ -d a -o -f 1.txt] && echo success || echo failed
# ! 条件 逻辑非 取反
[ ! -d a ] && echo success || echo failed
9.流程控制语句
9.1.if/else
if [ 条件判断式1 ]
then
当条件判断式1成立时,执行程序1
elif [ 条件判断式2 ]
then
当条件判断式2成立时,执行程序2
...省略更多条件
else # 不加then
当所有条件都不成立时,最后执行此程序
fi # 结束符
# 比较数值,使用(()),例如
#!/bin/bash
NUM1=${1}
NUM2=${2}
if ((${NUM1} > ${NUM2}));then
echo "num1 > num2"
else
echo "num1 < num2"
fi
# 脚本if.sh
#!/usr/bin/bash
read -t 30 -p "please your name:" name
echo $name
if [ $name == zs ]
then
echo "zszszs"
elif [ $name == lisi ];then # 也可以用这种语法
echo "lisilisi"
else
echo "fengjie"
fi
9.1.1 调试sh脚本
sh -x 1.sh
9.2.case
# 脚本case.sh
#!/usr/bin/bash
a=$1
case "$a" in
zs) echo "zs"
;;
lisi) echo "lisi"
;;
*) echo "ww"
esac
# 启动脚本
bash case.sh zs
9.3.for循环
第一种:
for N in 1 2 3
do
echo $N
done
或
for N in 1 2 3; do echo $N; done
或
for N in {1..100}; do echo $N; done # 这个可以从1到100
for N in `seq 1 100`;do echo $N; done # ``里面执行命令,获取结果
第二种:
for ((i = 0; i <= 5; i++)) # i+=2
do
echo "welcome $i times"
done
或
for ((i = 0; i <= 5; i++)); do echo "welcome $i times"; done
# 脚本for.sh
#!/usr/bin/bash
for((i=1;i<=10;i+=2))
do
echo $i
done
sum=0
for((i=1;i<=100;i++))
do
sum=$(($sum + $i)) # 计算
done
echo "sum="$sum
9.4.while
while expression
do
command
…
done
# 脚本while.sh
while 2>1;do sleep 1;echo 1;done # 条件不能加空格
while [ 2 -ge 1 ];do sleep 1;echo 1;done
while [ 2 -ge 1 ]
do
echo 1
sleep 1
done
# 计算1到100的和
#!/usr/bin/bash
i=0
sum=0
while(($i<=100))
do
sum=$(($sum + $i))
i=$(($i + 1))
done
echo "sum="$sum
10.自定义函数
# vim 编译, 冒号进入,查看多少行 set nu,然后再冒号,再输入行数
如果函数名后没有(),在函数名和{ 之间,必须要有空格以示区分。
函数返回值,只能通过$? 系统变量获得,可以显示加:return 返回值,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)
# 脚本func.sh
#!/usr/bin/bahs
function stop() { # 定义函数
echo "stoping"
echo $1 # 局部变量,调用的时候传进来
return 12
}
function start() {
echo "starting"
}
stop $1 # 调用函数
# 执行脚本
bash func.sh a;echo $?
stoping
a
12
字符串
运算符
格式化
printf "%d %s\n" 1 "abc"
11.脚本调试
sh -x script
这将执行该脚本并显示所有变量的值。
在shell脚本里添加
set -x 对部分脚本调试
sh -n script
不执行脚本只是检查语法的模式,将返回所有语法错误。
sh –v script
执行并显示脚本内容
12.四剑客
12.0.find
- Find工具的语法格式:find paht(路径) -options(参数) action(动作)
- PATH路径:可以任意路径,绝对路径,相对路径(/, /etc/, /home/)
- options参数:-name(按照名称寻找),-type(类型),-mtime(时间),-size(大小),-perm(权限)等
- Action动作:exec(承接),xargs(承接),print(打印)等;
# 查找以conf结尾,以us开头,不要us428.conf的文件,!表示否
find / -name *conf -name us* ! -name us428.conf
# 拷贝查找到的文件
for I in `find / -name *conf -name us* ! -name us428.conf`;do
cp $I /tmp/;done
for I in $( find / -name *conf -name us* ! -name us428.conf );do
cp $I /tmp/;done
12.0.1.exec
#exec {}表示的就是find查找的结果 ,后面的\ 表示结束符
find / -name *conf -name us* ! -name us428.conf -exec cp {} /tmp/ \;
12.0.2.xargs
#xargs 可以理解把查找的结果转换为一个数组
find / -name *conf -name us* ! -name us428.conf | xargs
# -i表示参数传递,xargs的用法,把find找到的结果传递给{}
find / -name *conf -name us* ! -name us428.conf | xargs -i cp {} /tmp/;
# 删除,把前面的结果都进行删除
find /tmp/ -name *conf -name us* ! -name us428.conf | xargs -i rm -rf {};
find /tmp/ -name *conf -name us* ! -name us428.conf | xargs rm -rf; # 此时可以省略
12.0.3.type
#type, f(文件),d(目录)等
find / -name nginx -type f;
# 查看权限
find / -name nginx -type f -exec ls -l {} \;
12.0.4.size
#size, 查找大于10M,小于20M
find / -name "*log" -size +10M -size -20M;
# 查看文件的大小
find / -name "*log" -size +1M -size -20M -exec du -sh {} \;
12.0.5.mtime
#mtime
-mtime -n +n # 按文件更改时间来查找文件,-n指n天以内,+n指n天以前
# 查找30天以内的所有日志为念,并查看其信息
find / -name "*.log" -mtime -30 -type f -exec ls -l {} \;
# 删除30天以前的日志
find / -name "*.log" -mtime +30 -type f -exec rm -rf {} \;
12.0.grep
- Grep工具的语法格式:grep -options(参数) word(字符) file(文件);
- option参数:-a(文本形式,默认),-c(统计),-i(忽略大小写),-v(取反|排除),-n(行号),-o(打印匹配词),-E(扩展参数|egrep),-A(after匹配之后行),-B(before匹配之前行),-C(context 匹配前和后的行)等
- File文件:匹配的对象,从什么地方进行匹配,文本文件,输出结果;
-a:文本形式,默认
-c:计算找到的符合行的次数
-i:忽略大小写
-n:行号
-v:取反|排除
-h:查询多文件时不显示文件名
-l:查询多文件时只输出包含匹配字符的文件名
-s:不显示不存在或无匹配文本的错误信息
-o:打印匹配词, 正则匹配的结果
-E:扩展参数|egrep ,正则表达式
-A:after匹配之后行
-B:before匹配之前行
-C:context 匹配前和后的行
# 查询多文件
grep "hello" 1.txt 2.txt
grep "nginx" $( find /etc/nginx/ -type f )
find /etc/nginx/ -type f -exec grep "nginx" {} \;
# -w 表示把80看成一个词,来进行寻找
netstat -nlp | grep -w 80
# -o 匹配ip, sort表示排序,uniq去重,head -3 取前三个
ifconfig | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort | uniq | head -3
# 正则,^$表示空行
ifconfig | grep -E "[0-9]{1,3}" # 里面写正则表达式
grep -vE "#|^$" 1.txt
12.1.cut
cut [选项] 文件名 默认分割符是制表符
选项:
-f 列号: 提取第几列
-d 分隔符: 按照指定分隔符分割列
# 以:为分隔符,取1,2,3列
cut -d: -f 1,2,3 /etc/passwd
cut -d ":" -f 1,2,3 /etc/passwd
cut -f 2 aa.txt 提取第二列
cut -d: -f 1,3 /etc/passwd 以:分割,提取第1和第3列
cat /etc/passwd | grep /bin/bash | grep -v root | cut -d ":" -f 1 获取所有可登陆的普通用户用户名
cut的局限性 不能分割空格 df -h 不能使用cut分割
df -h | grep sda1 | cut -f 5
12.2.awk
- AWK工具的语法格式:awk -option ‘pattern + {action}’ file;
- AWK语法中option参数:-F(格式化),-f(文件),-v(变量),-V(版本)等;
- AWK语法中action参数:>, >>, print(打印输出),是AWK工具默认的动作;
12.2.0.awk初步使用
awk -F分隔符 '/正则表达式/ {执行动作}' 文件名 # 默认分隔符是空格
awk '/^/ {print $1,$2}' 2.txt
awk '{print $1,$2}' 2.txt # 省略了正则表达式,表示该结果的所有
awk -F: '{print $1}' 1.txt # 打印第一列,以:作为分隔符
BEGIN 在所有数据读取之前执行
awk 'BEGIN {printf "first Line \n"} {printf $2 }' aa.txt 在输出之前使用BEGIN输出内容
END 在所有数据执行之后执行
awk 'END {printf "The End \n"} {print $2}' aa.txt 所有命令执行完后,输出一句
# 打印印含root的的信息
df -h | awk '/root/ {print $0}' # $0可以省略
df -h | awk '/root/ {print $1,$2}'
# 不写正则表示匹配所有
df -h | awk '{print}'
# 以空格,冒号,\t,分号为分割
awk -F'[:\t;]' '{print $1}' 1.txt
12.2.1.awk基本语法参数详解
- 单引号’'是为了和shell命令区分开
- 大括号{}表示一个命令分组
- pattern是一个过滤器,表示匹配pattern条件的才进行action处理
- action处理动作,常见动作为print
- 使用#作为注释,pattern和action可以只有其一,但不能两者都没有
12.2.2.awk内置变量详解
- FS分隔符,默认是空格
- OFS输出分隔符
- NR当前行数,从1开始
- NF当前记录字段个数
- $0当前记录
$1~$0
当前记录第n个字段(列)
# 显示最后一列和倒数第二列
df -h | awk '{print $NF, $(NF-1)}'
# 使用sed把:改为空格,然后使用awk
sed 's/\:/ /g' passwd | awk '{print $1}'
# 拼接字符 使用"",里面","表示空格
df -h | awk '{print NR":",$5}'
# 打印第1行至第三行
awk 'NR==1,NR==3 {print $0}' passwd # 1至3行
awk 'NR==1;NR==3 {print $0}' passwd # 只显示1和3行
awk 'NR>=2 {print $1}' passwd # 从第二行开始显示
12.2.3.awk内涵函数详解
- gsub(r,s):在$0中用s代替r
- index(s,t):返回s中t的第一个位置
- length(s):s的长度
- match(s,r):s是否匹配r
- split(s,a,fs):在fs上将s分成序列a
- substr(s,p):返回s从p开始的子串
12.2.4.awk常用操作符,运算符及判断符
- +±- 增加与减少(前置或后置)
- ^** 指数(右结合性)
- !± 非,一元(unary)加号,一元减号
- ±*/% 加减乘除余数
- < <= == != > >= 数组比较
- && 逻辑and
- || 逻辑or
- = += -= *= /= 赋值
12.2.5.awk与流程控制语句
- if(condition) {} else {}
- while {}
- do {} while {condition}
- for (init;condition;step) {}
- break/continue
# awk引用shell变量,使用-v或者双引号+单引号即可
awk -v WEB=http '{print WEB,$1}' /etc/passwd
WEB=http;awk '{print "'$WEB' "$1}' /etc/passwd
# 1一直加到10的和
seq 1 10 | awk 'BEGIN {ABC=0} {ABC+=$1}END{print ABC}'
# awk NR 行号除以2余数为0则跳过改行,继续执行下一行,打印在屏幕
awk -F: 'NR%2==0 {next} {print NR, $1}' /etc/passwd
# 条件语句
echo 1 2 3 | awk '{ if(($1>$2)||($2>$3)) {print $1} else {print $2} }'
12.3sed
语法:sed [选项] '[动作]' 文件名
sed '/正则表达式/命令(a c d i p g)' 文件名
常用选项:
-n 使用安静(silent)模式。显示经过sed特殊处理的数据。
-e 允许多点编辑。
-i 直接修改读取的档案内容,而不是由屏幕输出。
命令 | 功能描述 |
---|---|
a\ | 新增, a 的后面可以接字串,在下一行出现 |
c\ | 替换 |
d | 删除 |
i\ | 插入, i 的后面可以接字串 |
p | 打印 |
s | 查找并替换,例如 1,20s/old/new/g |
df -h | sed -n '1p' 接收命令结果数据
# s 字符串替换
sed 's/it/edu360/g' sed.txt 把sed.txt文件中的it替换为edu360,并输出
sed -e '1s/1/34/g;3s/yangmi/xx/g' sed.txt 同时进行多个替换,把第1行和第3行进行替换
sed -e '1s/1/32/g' -e '3s/yangmi/xx/g' sed.txt
sed –i 's/it/edu360/g' sed.txt 要想真正替换,需要使用-i参数
# p 打印
sed '2!p' sed.txt # 显示第二行和所有数据
sed -n '2,5p' nginx.conf # 显示2到5行
sed -n '2,5!p' nginx.conf # 表示不显示2到5行的数据
sed -n '/^error_log/p' nginx.conf
# i 插入
sed '4i fengjie canglaoshi' nginx.conf # 在第4行之前添加数据
sed '/error_log/'i"hello world" nginx.conf # 在匹配到数据之前添加数据
# a 追加,在下一行出现
sed '2a liuyifei'sed.txt 在第二行后面添加数据
sed '/error_log/'a"hello world" nginx.conf
# c 替换
sed '2c this is replace'sed.txt 替换第二行数据
sed '/error_log/'c"hello world" nginx.conf
sed 's/error_log/hello world/g' nginx.conf
# d 删除
sed '2,5d' nginx.conf # 删除2到5行
sed '/\#/d;/^$/d' nginx.conf # 表示把#与空行删除掉,这里不是真正的删除
# & 添加数据
# 在nginx.conf查找error_log的行,在其行首添加字符串hello,^表示起始标识,$表示最后,&在sed中表示添加
# /^error_log/ 这一行先进行匹配,在把匹配的结果给s/^/&hello/g进行处理
sed "/^error_log/s/^/&hello/g" nginx.conf
sed -n "/^error_log/p" nginx.conf | sed "s/^/&hello/g"
sed "/^/s/^/&\#/g" nginx.conf # 表示所有行前面都加上"#"
sed "s/^/&\#/g" nginx.conf # 表示所有行前面都加上"#"
# N 合并行
sed "N;s/\n/ /g" nginx.conf # 以每2行一合并
sed "N;N;s/\n/ /g" nginx.conf # 以每3行一合并
综合使用
# 查找范围 ,09:00-10:00,统计有多少行
sed -n '/2020:09:00/,/2020:10:00/'p nginx.log | wc -l
awk '/2020:09:00/,/2020:10:00/' nginx.log | wc -l
sort和uniq
cat 1.txt | sort | uniq -c | sort -n
# uniq -c 统计重复的次数,sort -n 按照次数排序 -nr(倒叙)
13.定时任务
# crontab
crontab命令格式
作用:用于生成cron进程所需要的crontab文件
crontab的命令格式
# crontab -e
使用编辑器编辑当前的crontab文件。
crontab文件格式
minute hour day-of-month month-of-year day-of-week commands
分< >时< >日< >月< >星期< >要运行的命令 < >表示空格
其中
Minute 一小时中的哪一分钟 [0~59]
hour 一天中的哪个小时 [0~23]
day-of-month 一月中的哪一天 [1~31]
month-of-year 一年中的哪一月 [1~12]
day-of-week 一周中的哪一天 [0~6] 0表示星期天
commands 执行的命令
书写注意事项
1,全都不能为空,必须填入,不知道的值使用通配符*表示任何时间
2,每个时间字段都可以指定多个值,不连续的值用,间隔,连续的值用-间隔。
3,命令应该给出绝对路径
4,用户必须具有运行所对应的命令或程序的权限
如何使用crontab 运行多个任务:
方法1:在crontab -e 里 写多个
输入命令 crontab –e
# 例如
分钟 小时 天 月 星期 命令/脚本
示例:
eg:4点备份
0 4 * * *
eg:每周二,周五,下午6点 的计划任务
0 18 * * 2,5
eg:1到3月份,每周二周五,下午6点的计划任务
0 18 * 1-3 2,5
eg:周一到周五下午,5点半提醒学生15分钟后关机
30 17 * * 1-5 /usr/bin/wall < /etc/issue
45 17 * * 1-5 /sbin/shutdown -h now
eg:学校的计划任务, 12点14点,检查apache服务是否启动
*/2 12-14 * 3-6,9-12 1-5
eg:再添加一个备份,把/etc目录备份到/backup下,然后把错误的情况也记录下来,正确的文件都丢到/dev/null下,看不见(相当于一个黑洞)
*/2 12-14 * 3-6,9-12 1-5 /bin/cp -r /etc /backup/etc.20170407 2> /backup/etc.bak.err
/dev/null
eg:每月 1、1 0、2 2日的4:45运行/apps/bin目录下的backup.sh
45 4 1,10,22 * * /apps/bin/backup.sh
eg:每周六、周日的 1 : 10运行一个find命令
10 1 * * 6,0 /bin/find -name "core" -exec rm {} \;
eg:在每天 18:00至23 :00之间每隔30分钟运行/apps/bin目录下的dbcheck.sh
0,30 18-23 * * * /apps/bin/dbcheck.sh
eg:每星期六的 11:00 pm运行/apps/bin目录下的qtrend.sh
0 23 * * 6 /apps/bin/qtrend.sh
14.history
history 历史命令
功能:帮助用户回忆执行过的命令
-c 清楚所有历史命令
-w 把缓存中的历史命令写入历史命令保存文件~/.bash_history
!命令号 执行这条历史命令
!字符串 执行以该字符串开头的最近的一条历史命令
历史命令默认会保存1000条,可以在环境变量配资文件/etc/profile中进行修改