一、注释
“# ”开头的就是注释,被编译器忽略
单行注释: #
多行注释: :<<EOF … EOF 或者 :<<! … ! (:<< 标识多行注释开始,并指定一个标识符作为开始结束的标志)
二、变量
变量类型
运行shell时,会同时存在三种变量:
局部变量:局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
shell变量:shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
三、变量操作
创建普通变量: name=“test” (=两边不可有空格)
创建只可函数体中使用的局部变量: local name=“test” (使用local修饰的变量在函数体外无法访问,并且local只能在函数体内使用)
使用变量: echo $name 或者 echo ${name} (推荐使用大括号版)
变量重新赋值: name=“new_test” (将原值覆盖)
只读变量: name=“only_read” -> readonly name (使用readonly标识后的变量,不可被修改)
删除变量: unset name; (删除之后不可访问,删除不掉只读变量)
四、字符串变量
1)单引号
单引号变量var='test' ,只能原样输出,变量无效
单引号中不能出现一个单独的单引号,转义也不可以
2)双引号
双引号变量var="my name is ${name}",变量有效
可出现转义符
3)拼接字符串
中间无任何+,之类的字符
name=“this is”" my name"; name=“this is my name”; name=“this” is “my name” 等效
name=‘this is’’ my nam’; name=‘this is my name’; name=‘this’ is ‘my name’ 等效
4)获取字符串长度
在${}中使用“#”获取长度
name=“test”;
echo ${#name}; # 输出为4
5)提取子字符串
1:4 从第2个开始 往后截取4个字符
::4 从第一个字符开始 往后截取4个字符
name=“this is my name”;
echo ${name:1:4} #输出 his
echo ${name::4} #输出 this
五、数组
bash只支持一维数组,不支持多维数组
定义数组:array_name=(li wang xiang zhang) (小括号做边界、使用空格分离)
单独定义数组的元素: array_para[0]=“w”; array_para[3]=“s” (定义时下标不连续也可以)
赋值数组元素:array_name[0]=“zhao”;
获取数组元素:
array_name[0]=“li”
array_name[3]=“zhang”
echo ${array_name[0]} # 输出"li"
echo ${array_name[1]} # 输出" "
echo ${array_name[3]} # 输出"zhang"
echo ${array_name[@]} # 输出"li zhang" 输出数组所有元素,没有元素的下标省略
取得元素个数:${#array_name[@]} 或者 ${#array_name[*]}
取得单个元素长度:${#array_name[1]}
六、参数传递
获取参数值:
$0 : 固定,代表执行的文件名
$1 : 代表传入的第1个参数
$n : 代表传入的第n个参数
$#:参数个数
$*: 以一个单字符串显示所有向脚本传递的参数。如"$*“用「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数
$@:与$*相同,但是使用时加引号,并在引号中返回每个参数。
$$:脚本运行的当前进程号
$!:后台运行的最后一个进程的ID
$?: 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
$* 与 $@ 区别
相同点:都是引用所有参数。
不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 “1 2 3”(传递了一个参数),而 “@” 等价于 “1” “2” “3”(传递了三个参数)。
七、运算符
1、算数运算
+ 、-、*、\ : 乘号前必须加\进行转义才可以进行乘法运算
加法运算
val=`expr 2 + 2` (使用linux命令expr进行辅助运算)
val=$[2+2] (4个空格不是必要的,不同于条件判断)
val=$((2+2))
2、数字关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
下面假定变量 a 为 10,变量 b 为 20
-eq :检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 false。
-ne: 检测两个数是否不相等,不相等返回 true。 [ $a -ne $b ] 返回 true。
-gt: 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ] 返回 false。
-lt : 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。
-ge: 检测左边的数是否大于等于右边的,如果是,则返回 true。 [ $a -ge $b ] 返回 false。
-le : 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ] 返回 true。
3、字符串运算符
下表列出了常用的字符串运算符,假定变量 a 为 “abc”,变量 b 为 “efg”:
= :检测两个字符串是否相等,相等返回 true。 [ “$a” = “$b” ] 返回 false。
!= :检测两个字符串是否相等,不相等返回 true。 [ “$a” != “$b” ] 返回 true。
-z :检测字符串长度是否为0,为0返回 true。 [ -z “$a” ] 返回 false。
-n :检测字符串长度是否为0,不为0返回 true。 [ -n “$a” ] 返回 true。
$ :检测字符串是否为空,不为空返回 true。 [ “$a” ] 返回 true。
4、布尔运算符
下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:
! :非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。
-o :或运算,有一个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a :与运算,两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。
5、逻辑运算符
以下介绍 Shell 的逻辑运算符,假定变量 a 为 10,变量 b 为 20:
&& :逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| :逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true
6、文件运算符
-b file :检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
-c file :检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。
-d file :检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。
-f file :检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。
-g file :检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。
-k file :检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。
-p file :检测文件是否是有名管道,如果是,则返回 true。 [ -p $file ] 返回 false。
-u file :检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。
-r file :检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。
-w file :检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。
-x file :检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。
-s file :检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。
-e file :检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。
八、执行相关
1、命令替换
命令替换与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行。
执行命令:
`ls /etc` : 反引号 (所有的unix系统都支持)
$(ls /etc) : $+() (部分unix系统不支持)
多个嵌套使用时,从内向外执行
for file in \s /etc\ 或 for file in $(ls /etc) 循环中使用
`dirname $0` 获取脚本文件所在的目录
path=$(cd `dirname $0`;pwd) : 获取脚本当前所在目录,并且执行cd命令到达该目录,使用pwd获取路径并赋值到path变量
2、算术运算
$[ ] : 加减乘除,不必添加空格
$(( )) :加减乘除等,不必添加空格
3、逻辑判断
[ ] : 中括号旁边和运算符两边必须添加空格 (可以使用,不推荐)
[[ ]]:中括号旁边和运算符两边必须添加空格 (字符串验证时,推荐使用)
(()) : 中括号旁边和运算符两边必须添加空格 (数字验证时,推荐使用)
[[]] 和 (()) 分别是[ ]的针对数学比较表达式和字符串表达式的加强版。
使用[[ … ]]条件判断结构,而不是[ … ],能够防止脚本中的许多逻辑错误。比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。比如可以直接使用if [[ $a != 1 && $a != 2 ]], 如果不适用双括号, 则为if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ]。
[[ ]]中增加模式匹配特效;
(( ))不需要再将表达式里面的大小于符号转义,除了可以使用标准的数学运算符外,还增加了以下符号
4、输出
1、echo: 仅用于字符串的输出,没有使用printf作为输出的移植性好,建议使用printf
2、printf 不会像 echo 自动添加换行符,我们可以手动添加 \n
无大括号,直接以空格分隔
格式:printf format-string [arguments...] 其中(format-string: 格式控制字符串、arguments: 参数列表)
案例:printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
%s %c %d %f 都是格式替代符
d:Decimal 十进制整数 对应位置参数必须是十进制整数,否则报错!
s:String 字符串 对应位置参数必须是字符串或者字符型 否则报错
c:Char 字符 对应位置参数必须是字符串或者字符型 否则报错
f:Float 浮点 对应位置参数必须是数字型 否则报错
%-10s : 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
%-4.2f :指格式化为小数,宽度为4个字符,其中.2指保留2位小数。
转义符:
\a :警告字符,通常为ASCII的BEL字符
\b :后退
\c :抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略
\f :换页(formfeed)
\n :换行
\r :回车(Carriage return)
\t :水平制表符
\v :垂直制表符
\ :一个字面上的反斜杠字符
\ddd :表示1到3位数八进制值的字符。仅在格式字符串中有效
\0ddd :表示1到3位的八进制值字符
九、转义字符的意义
- 表示换行:\n
- 表示回车:\r
- 表示水平的制表符:\t
- 表示垂直的制表符:\v
- 表示后退符:\b
- 表示”警告”:\a
- 翻译成ASCII码为八进制0xx所表示的字符:\0xx
- 表示引号(“)用:\”
- 表示美元符号($)用:\$
- 表示反斜杠(\)用:\\
- $(()):对变量进行操作
十、特殊符号的使用
eg:
a=5;b=5
s=a+b
echo $s 输出:a+b
echo $((a+b)) 输出:10
- echo $? :看上条语句的命令是成功还是失败 返回0:成功 其余不为0的值为失败
eg:
echo false 输出:false
echo $? 输出:0
ls sss 输出:ls: cannot access sss: No such file or directory
echo $? 输出:2
- {1. .10} 等价于 seq 1 10,表示1到10 (中间两个连续的点)
eg:
[root@iZ2zefahl test]# for i in {1..3};do echo $i ;done;
1
2
3
- seq 1 3 10 表示生成一个1到10,步进为3
eg:
[root@iZ2zefahl test]# for i in `seq 1 3 10`;do echo $i ;done;
1
4
7
10
十一、数字型变量操作
1、计算
[root@iZ2]# i=1;echo $i;echo $((i+1))
1
2
只能进行整数计算,不支持浮点数运算
[root@iZ2zefa]# echo $((1/3))
0
浮点数运算使用awk
[root@iZ2zefa]# awk 'BEGIN{print(1/3)}'
0.333333
格式化展示使用awk ,printf格式化字符串
[root@iZ2zefahlffrq9ahi3ykd2Z test]# awk 'BEGIN{printf("%.2f\n", 1/3)}'
0.33
2、更新数值
[root@iZ2]# i=1
[root@iZ2]# ((i=i+1));echo $i
2
十二、字符串操作
1、${value:offset} / ${ value: offset: length} : 从变量中提取子串
[root@iZ2]# s="hello word"
[root@iZ2]# echo ${s:6}
word
[root@iZ2]# echo ${s:6:3}
wor
2、${#s} : 获取字符串长度
[root@iZ2]# echo ${#s}
10
3、${#array[*]}和${#array[@]}表示数组中元素的个数
[root@iZ2]# a=(1 2 3 4)
[root@iZ2]# echo ${#a[*]}
4
[root@iZ2]# echo ${#a[@]}
4
4、掐头去尾与内容替换
${ value# pattern) 或 $(value## pattern) (#表示去头,## : 贪婪匹配)
[root@iZ2]# s="hello world"
[root@iZ2]# echo ${s#hell}
o world
[root@iZ2]# echo ${s#*l} //匹配到第一个l后,掐掉l以及l之前的字符串。*表示任意多个字符
lo world
[root@iZ2]# echo ${s##*l} //贪婪匹配,匹配到最后一个l
d
5、${ value% pattern} ${ value%% pattern)( %表示去尾 , %%:贪婪匹配)
[root@iZ2]# s="hello world"
[root@iZ2]# echo ${s%world}
hello
[root@iZ2]# echo ${s%l*} //去尾,*号放后面。*表示任意多个字符
hello wor
[root@iZ2]# echo ${s%%l*} //贪婪匹配
he
6、${ vaue/ pattern/ string} $ {value// pattern/ string} ( /表示替换 )
[root@iZ2]# s="hello world"
[root@iZ2]# echo ${s/hello/nohello}
nohello world
[root@iZ2]# echo ${s//o/ZZZ} //所有o替换
hellZZZ wZZZrld
#与##、%与%%、/与//的区别: 最短匹配模式VS最长匹配模式
十三、判断类型
1、算术判断
[ 2 –eq 2 ] 相等
[ 2 –ne 2 ] 不等
[ 3 –gt 1 ] 大于
[ 3 –ge 3 ] 大于等于 [ 3 –lt 4 ] 小于
[ 3 –le 3 ] 小于等于
(())也可以表示算术比较。((10>=8)) ,((10==10))
[root@iZ2]# echo $((10>8))
1
2、字符串比较
[ str1 = str2 ] 如果两字符串相同,则结果为真
[ str1 != str2 ] 如果两字符串不相同,则结果为真
[ -n "$str" ] 如果字符串不是空,则结果为真
[ -z "$str" ] 如果字符串是空,则结果为真
//[[ "xxxx" == x* ]] 在表达式中表示0或者多个字符
//[[ xxx == x?? ]] 在表达式中表示单个字符
在引用变量的时候要加双引号[ -z "$a"] 否则当a未定义时会语法报错
3、逻辑判断
[ 2 -ge 1 -a 3 -ge 4 ];echo $? 与
[ 2 -ge 1 -o 3 -ge 4 ];echo $? 或
[[ 2 -ge 1 && 3 -ge 4 ]];echo $? 与 //需要[[]]2层括号
[[ 2 -ge 1 || 3 -ge 4 ]];echo $? 或
[ ! 2 -ge 1 ];echo $? 非
[[]]是[]的扩展语法,在老的sh里并不支持。推荐用[]
4、内置判断
-e file 如果文件存在,则结果为真
-d file 如果文件是一个子目录,则结果为真
-f file 如果文件是一个普通文件,则结果为真
-r file 如果文件可读,则结果为真
-s file 如果文件的长度不为0,则结果为真
-w file 如果文件可写,则结果为真
-x file 如果文件可执行,则结果为真
————————————————
详解:
1、shell特殊变量:
$0 当前脚本的文件名或者解释器。
$n(n≥1) 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1,第二个参数是 $2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。当被双引号" "包含时,$@ 与 $* 稍有不同,$*的所有参数是一个数据,而$@一个参数就是一份数据
$? 上个命令的退出状态,或函数的返回值
$$ 当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。
例如:
#!/bin/bash
#shell特殊变量
#$n: $0表示本脚本,$1表示输入的第一个参数:11,$2表示输入的第一个参数:22
echo "$ 0: $0"
echo "a: $1"
echo "b: $2"
#$*: 输入的参数 11 22
echo "$ *: $*"
#$@: 输入的参数 11 22
echo "$ @: $@"
#$$: shell进程id
echo "$ $: $$"
#$#: 参数个数 2
2、shell中字符串的拼接:
#!/bin/bash
#shell字符串的拼接
n1=ab
n2=cd
temp1=${n1}${n2} #中间不能有空格
temp2="${n1}${n2}"
temp3="${n1}cdefg"
echo "${temp1}"
echo "${temp2}"
echo "${temp3}"
3、字符串的截取
${string: start :length}:字符串从左边start开始的位置截取length个字符,如果没有length,就从左边start开始到结束
${string: 0-start :length}:字符串从右边start开始的位置截取length个字符,如果没有length,就从右边数start开始到结束
${string#*chars}:字符串从左边开始的第一个chars开始的位置截取到右边结束,chars本身不在截取范围内
${string##*chars}:字符串从左边开始的最后一个chars开始的位置截取到右边结束,chars本身不在截取范围内
${string%*chars}:字符串从右边边开始的第一个chars开始的位置截取到左边结束,chars本身不在截取范围内
${string%%*chars}:字符串从右边开始的最后一个chars开始的位置截取到左边结束,chars本身不在截取范围内
#!/bin/bash
#shell截取字符串
str=http//:baidu.com/.c
echo "length: ${str:7:5}" # baidu
echo "no length: ${str:7}" # baidu.com/.c
echo "length: ${str:0-7:5}" # .com/
echo "no length: ${str:0-7}" # .com/.c
echo "#: ${str#*/}" # /:baidu.com/.c
echo "##: ${str##*/}" # .c
echo "%: ${str%/*}" # http//:baidu.com
echo "%%: ${str%%/*}" # http
4、if基本语法
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
else
程序
fi
注意事项:
(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
(2)if后要有空格
5、if单分支:
-eq 等于,如:if [ "$a" -eq "$b" ]
-ne 不等于,如:if [ "$a" -ne "$b" ]
-gt 大于,如:if [ "$a" -gt "$b" ]
-ge 大于等于,如:if [ "$a" -ge "$b" ]
-lt 小于,如:if [ "$a" -lt "$b" ]
-le 小于等于,如:if [ "$a" -le "$b" ]
#!/bin/bash
#shell中if:
#if单分支第一中形式:if []
if [ 1 -eq 1 ] #[]里面的数据和中括号必须一个空格
then
echo "first if:真"
fi
#if单分支第二中形式:if []; then
if [ 1 -eq 1 ]; then #then和if写在同一行必须要用;
echo "second if:真"
fi
#if单分支第三中形式:if (())
if ((1==1))
then
echo "third if:真"
fi
6、if多分支:
#!/bin/bash
#shell中if:
#if多分支
if ((1==0)) #判断1和o是不是相等
then
echo "1=0;是真的"
elif ((1>0))
then
echo "1>0;是真的"
else
echo "1>0;是假的"
fi
#..............................
if [ 1 -eq 0 ] #判断1和o是不是相等
then
echo "1=0;是真的"
elif [ 1 -gt 0 ]
then
echo "1>0;是真的"
else
echo "1>0;是假的"
fi
7、shell中的 case语句:
#!/bin/bash
#shell中的case
read VAILE #在屏幕中输入一个数,1或者2,如果不是这两个数就代表其他;*),
case ${VAILE} in
"1")
echo "我是1"
;;
"2")
echo "我是2"
;;
*)
echo "我不是1,也不是2"
;;
esac
8、隐藏打印结果
./test.sh 1>/dev/null 2>&1
1>/dev/null是标准输出, 标准输出输出到/dev/null就可以了
2>&1 是错误输出
9、shell脚本输出带颜色的字体
输出特效格式控制:
\033[0m 关闭所有属性
\033[1m 设置高亮度
\03[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[30m -- \033[37m 设置前景色
\033[40m -- \033[47m 设置背景色
光标位置等的格式控制:
\033[nA 光标上移n行
\03[nB 光标下移n行
\033[nC 光标右移n行
\033[nD 光标左移n行
\033[y;xH设置光标位置
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\33[?25h 显示光标
特别篇:
1.linux设置shell脚本开机自启
方法一:修改 /etc/rc.d/rc.local 文件
/etc/rc.d/rc.local 文件会在 Linux 系统各项服务都启动完毕之后再被运行。所以你想要自己的脚本在开机后被运行的话,可以将自己脚本路径加到该文件里。
但是,首先需要确认你有运行这个文件的权限。
$ chmod +x /etc/rc.d/rc.local
为了演示,我们创建了一个脚本,当它被执行之后,将在家目录下写入有特定信息的文件。
$ vim auto_run_script.sh
#!/bin/bash
date >> /home/alvin/output.txt
hostname >> /home/alvin/output.txt
保存退出后,再给它赋予可执行权限:
$ chmod +x auto_run_script.sh
然后,我们再将脚本添加到 /etc/rc.d/rc.local 文件最后一行:
$ vim /etc/rc.d/rc.local
/home/alvin/auto_run_script.sh
接下来,我们就可以试试效果了。直接重启系统就可以了:
$ sudo reboot
重启之后,就会在家目录下看到脚本执行的结果了。
方法二:使用 crontab
大家知道,crontab 是 Linux 下的计划任务,当时间达到我们设定的时间时,可以自动触发某些脚本的运行。
我们可以自己设置计划任务时间,然后编写对应的脚本。但是,有个特殊的任务,叫作 @reboot ,我们其实也可以直接从它的字面意义看出来,这个任务就是在系统重启之后自动运行某个脚本。
那它将运行的是什么脚本呢?我们如何去设置这个脚本呢?我们可以通过 crontab -e 来设置。
$ crontab -e
@reboot /home/alvin/auto_run_script.sh
然后,直接重启即可。运行的效果跟上面类似。
2.liunx设置定时执行shell脚本
注:此cron命令适用于CentOS-7(定时任务shell输出结果不能打印在控制台)
(1)服务命令
1.检测cron定时服务是否自启用
systemctl is-enabled crond.service
结果展示如下:
enable表示已启用自启动
disable标识未启用自启动
2.如果未启用,则开启cron自启用
systemctl enable crond.service
3.如果已经启用,想要cron关闭自启动
systemctl disable crond.service
4.查看cron服务的启动状态
[只有cron的状态是active running的,才表示cron服务是启动的]
systemctl status crond.service
5.启动cron服务[命令没有提示]
systemctl start crond.service
6.停止cron服务[命令没有提示]
systemctl stop crond.service
7.重启cron服务[命令没有提示]
systemctl restart crond.service
8.重新加载cron服务[命令没有提示]
systemctl reload crond.service
(2)操作命令
定时任务:
* * * * * command
minute hour day month week command
分 时 天 月 星期 命令
————————————————
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
————————————————
特殊字符:
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”。
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”。
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
————————————————
1,crontab -e 编辑添加定时任务
2,*/2 * * * * /home/admin/jiaoben/buy/deleteFile.sh 每个两分钟执行一下脚本
3,crontab -l 查看该用户下的定时任务
4,crontab -u 定某个用户的cron服务
- crontab -r 删除没个用户的cron服务
6.查看cron执行日志
tail -f -n 200 /var/log/cron
7,cron文件语法:
分 小时 日 月 星期 命令
0-59 0-23 1-31 1-12 0-6 command (取值范围,0表示周日一般一行对应一个任务)
————————————————
(3)定时任务日志查看
tail -f /var/log/cron 查看全部的
ps -ef | grep xxx.sh /var/log/cron 查看某个脚本执行日志
(4)定时任务结尾加>dev/null 2>&1
a、标准输入输出设备
/dev/null:是系统的空设备(也就是黑洞)
0:表示标准输入
1:表示标准输出,系统默认是1
2:表示标准错误
b、重定向
2>&1 :把标准错误重定向到标准输出
>/dev/null 2>&1等价于1>/dev/null 2>/dev/null也等价于&>/dev/null
>/dev/null 2>&1 & == 1>/dev/null 2>&1 &
/dev/null:表示Linux的空设备文件
>:表示重定向到哪里
&1:&表示等同于的意思,2>&1,表示2的输出重定向等于于1
&:表示后台执行,即这条指令执行在后台运行
1>/dev/null:表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,不显示任何信息。
2>&1:表示标准错误输出重定向等同于标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
c、邮件服务容易导致邮件临时目录中小文件过多
由于CentOS5.x默认安装并开启邮件服务,如查不加>/dev/null 2>&1,有可能产生大量输出信息,导致邮件临时目录/var/spool/clientmqueue文件数猛增,占用大量inode节点。CentOS6.x虽然默认不安装邮件服务,但有可能以后会手动安装邮件服务,也会导致上述问题。
3.查看磁盘占用情况
df -ah 整体预览
du -sh * | sort -n 查看当前目录下的
du -h --max-depth=1 |grep 'G' |sort 查看上GB的目录并且排序