命令
1.crontab
Linux 中支持定时命令:crond
通过crontab命令,可以在固定的间隔时间执行指定的系统指令或shell script 脚本
时间间隔单位 分钟、小时、日、月、周
crontab -e 编辑用户目前的 crontab
基本格式:
* * * * * command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时0~23(0表示0点) 7-9表示:7点到9点之间
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
例子:
语句 | 意思 |
---|---|
*/1 * * * * date >> /root/date.txt | 表示每分钟执行一次date命令 |
30 21 * * * /usr/local/etc/rc.d/httpd restart | 表示每晚的21:30重启 |
45 4 1,10,22 * * /usr/local/etc/rc.d/httpd restart | 表示每月1、10、22日的4 : 45重启 |
* 23-7/1 * * * /usr/local/etc/rc.d/httpd restar | 晚上11点到早上7点之间,每隔一小时重启 |
shell编程
shell 是用户与内核交互操作的一种接口,称为bash shell
1.基本格式
vi hello.sh ##创建一个脚本
#! /bin/bash ##表示用一种shell解析器来解析执行脚本程序
echo "hello world" ##输出文本
sh hello.sh ##执行脚本
./hello.sh
注:给脚本添加可执行权限 ,使用chmod
2.基本语法
Linux Shell中的变量分为“系统变量”和“用户自定义变量”,set命令可以查看变量
注意:空格问题和字符拼接
字符拼接
a="hello world"
echo $a"s"
##结果为 hello worlds
3.自定义变量
语法:
变量=值 (例如STR=abc)
等号两侧不能有空格
变量名称一般习惯为大写
使用变量: $arg
双引号和单引号有区别,
双引号仅将空格脱意,
单引号会将变量引用比如$param脱意
unset(变量名) :撤销某个变量
readonly 声明静态的变量 ,不能 unset 只读变量
export 可把变量提升为当前shell进程中的全局环境变量,可供其他子shell程序使用
##首先定义一个b.sh
#!/bin/bash
b="b in b.sh"
echo $b
##在a.sh中调用b.sh
#!/bin/bash
a="a in a.sh"
echo $a
. ./b.sh
## 注意:重点关注最前面那个 “.”号。不要在新的bash执行,在当前的bash执行
反引号赋值:反引号,运行里面的命令,并把结果返回给变量
A=`ls -la`
##等价于
A=$(ls -la)
4.特殊变量
$? 表示上一个命令退出的状态码(0-255)
$$ 表示当前进程编号
$0 表示当前脚本名称
$n 表示n位置的输入参数(n代表数字,n>=1)
$# 表示参数的个数,常用于循环
∗ 和 *和 ∗和@ 都表示参数列表
5.算术表达式运算
##用expr
S=`expr 2 + 3`
B=`expr $S \* 4` ## *需要转译
echo $B
##用$[]
a=$[1+2]
echo $a
##用let
i=1
let i++
流程控制
1.if 语法格式
if [condition]
then
statements
elif [condition ]
then statements. ..
else
statements
fi
例1 输入一个name执行语句
#!/bin/bash
read -p "please input your name:" NAME ## read命令用于从控制台读取输入数据
if [ $NAME = root ]
then
echo "hello ${NAME}, welcome !"
elif [ $NAME = ydhl2]
then
echo "hello ${NAME}, welcome !"
else
echo "get out here !"
fi
注:=左右空格问题
2.判断条件 条件判断基本语法
[ condition ] 条件前后要有空格 非空返回true
[ ] 空返回false
##[]里=周边空格有区别
if [ a = b ];then echo ok;else echo notok;fi
##notok
if [ a=b ];then echo ok;else echo notok;fi
##ok
条件判断组合
注:[] 与[[ ]] 的区别:[[ ]] 中逻辑组合可以使用 && || 符号,而[] 里面逻辑组合可以用 -a等价为&, -o 等价为 |
while语法 和 case语法 和 for语法
##while语法
i=1
while ((i<=3))
do
echo $i
let i++
done
##case语法
case $1 in
start)
echo "starting"
;;
stop)
echo "stoping"
;;
*)
echo "Usage: {start|stop}"
esac
##for语法方式一
for N in 1 2 a
do
echo $N
done
##或
for N in 1 2 3; do echo $N; done
##或
for N in {1..3}; do echo $N; done
##方式二
for ((i = 0; i <= 5; i++))
do
echo "welcome $i times"
done
##或
for ((i = 0; i <= 5; i++)); do echo "welcome $i times"; done
函数
1.函数的定义
#!/bin/sh
hello() ## 函数定义
{
echo "Hello there today's date is `date +%Y-%m-%d`"
return 3 ###返回值其实是状态码,只能在[0-255]范围内
}
echo "now going to the function hello"
hello##调用函数
echo $? 获取函数的return值
2.函数的参数
#!/bin/bash
fun(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
## echo "第十个参数为 $10 !"$10不能获取第十个参数,${10}获取第十个参数
echo "第十个参数为 ${10} !"
echo "第十一个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
fun 1 2 3 4 5 6 7 8 9 34 73
3.函数返回值
#!/bin/bash
##将两个数相加
funReturn(){
echo "输入第一个数字: "
read aNum
echo "输入第二个数字: "
read anotherNum
echo "两个数字分别为 $aNum 和 $anotherNum !"
return $(($aNum+$anotherNum))##返回两数字之和
}
funReturn
echo "输入的两个数字之和为 $? !"
4.跨脚本调用
#!/bin/bash
. /root/fun2.sh ## 注意:. 和 / 之间有空格,调用的路径
##调用函数并输入参数