主要内容:
1.格式
2.变量
3.判断
4.循环
一、格式
1.#!
[root@backup scripts]# vim chek.sh
#!/bin/bash
#!/bin/bash
其中#!叫做幻数,用来指定脚本用的命令解释器
2.执行脚本
用命令sh执行脚本
参数 -x 显示脚本执行的过程
[root@m01 scripts]# sh test-v2.sh 2 5
0.4
10
7
-3
[root@m01 scripts]# sh -x test-v2.sh 2 5
+ x=2
+ y=5
+ '[' 2 -lt 2 ']'
+ awk -vn1=2 -vn2=5 'BEGIN{print n1/n2}'
0.4
+ awk -vn1=2 -vn2=5 'BEGIN{print n1*n2}'
10
+ awk -vn1=2 -vn2=5 'BEGIN{print n1+n2}'
7
+ awk -vn1=2 -vn2=5 'BEGIN{print n1-n2}'
-3
二、变量:定义一些变量,方便在脚本里面进行重复使用
1.命名规则:
1.看到变量名称,就能识别变量是什么内容
[root@m01 scripts]# date=`date +%F-%w`
[root@m01 scripts]# echo $date
2019-05-30-4
2.不能以数字开头
[root@m01 scripts]# date01=`date +%F-%w`
[root@m01 scripts]# echo $date01
2019-05-30-4
[root@m01 scripts]# 01date=`date +%F-%w`
-bash: 01date=2019-05-30-4: command not found
2.引号系列
1.单引号:所见即所得
2.双引号:`` !
类似单引号,特殊符号会被解析运行
3.不加引号:与双引号类似 支持通配符 * {} ? [] [^]
4.反引号:优先执行 将结果拿出来使用
[root@m01 scripts]# oldboy='old man'
[root@m01 scripts]# echo $oldboy
old man
3.变量分类
1.局部变量(普通变量)
取变量内容
[root@m01 scripts]# week=7
[root@m01 scripts]# echo $week
7
[root@m01 scripts]# echo $weekday
[root@m01 scripts]# echo ${week}day
7day
2.全局变量(环境变量)
1.特点:
1.系统创建的
2.大部分环境下意思一样
3.全局变量一般都是大写,但是大写的变量名不一定是大写
2.常见的环境变量
1.PATH:命令的位置
2.PS1:命令提示符的格式
3.LANG:字符集
3.创建环境变量:变量定义前加export
[root@m01 scripts]# env |grep DATE
[root@m01 scripts]# echo $DATE
[root@m01 scripts]# export DATE=`date +%F-%T`
[root@m01 scripts]# echo $DATE
2019-05-30-19:35:34
[root@m01 scripts]# env |grep DATE
DATE=2019-05-30-19:35:34
PS:重新连接后失效
4.取消变量:unset
[root@m01 scripts]# unset DATE
[root@m01 scripts]# echo $DATE
[root@m01 scripts]# env |grep DATE
[root@m01 scripts]#
4.特殊变量
1.$?:上一条命令的返回值,执行成功返回值为0,失败返回值非0
[root@m01 scripts]# pwd
/server/scripts
[root@m01 scripts]# echo $?
0
[root@m01 scripts]# pwa
-bash: pwa: command not found
[root@m01 scripts]# echo $?
127
[root@m01 scripts]#
2.$#:显示脚本的命令行中参数的个数
[root@m01 scripts]# cat test.sh
#!/bin/bash
echo $#
[root@m01 scripts]# sh test.sh a b c d e f
6
[root@m01 scripts]#
3.$*:显示脚本所有的参数
[root@m01 scripts]# cat test.sh
#!/bin/bash
echo $*
[root@m01 scripts]# sh test.sh a b c d e f
a b c d e f
4.$数字:
$1,$2...$n:显示脚本的第n个参数(n>1)
[root@m01 scripts]# cat test.sh
#!/bin/bash
echo $1 $2 $3
[root@m01 scripts]# sh test.sh a b c d e f
a b c
$0:表示脚本的路径名字
[root@m01 scripts]# cat test.sh
#!/bin/bash
echo $1 $2 $3 $0
[root@m01 scripts]# sh test.sh a b c d e f
a b c test.sh
三、判断
1.特殊符号
1.&&:前一个命令执行成功,再执行后一条命令
[root@m01 scripts]# pwd && echo success
/server/scripts
success
2.||:前一条命令执行失败,在执行后一条命令
[root@m01 scripts]# pwa || echo failed
-bash: pwa: command not found
failed
2.条件判断:[ ]
1.文件目录:
1.-d :判断目录是否存在
2.-f:判断文件是否存在
[root@m01 scripts]# [ -d /etc ] && echo dir exists
dir exists
[root@m01 scripts]# [ -d /ect ] || echo dir not exists
dir not exists
[root@m01 scripts]# [ -f /etc/rsyncd.conf ] && echo File exists
File exists
[root@m01 scripts]# [ -f /etc/ip.txt ] || echo File not exists
File not exists
2.比大小
-eq:=
equal 等于
-ne:!=
not equal 不等于
-gt:>
great than 大于
-ge:>=
great equal 大于等于
-lt:<
less than 小于
-le:<=
less equal 小于等于
3.if 条件判断
格式:
if [ 判断条件 ];then
满足条件,执行的操作
else
不满足条件执行的操作
fi
echo "hostname:" `ssh $ip hostname`
if [ $? -ne 0 ]
then
action "host $ip connect failed!" /bin/false
else
action "host $ip connect success" /bin/true
fi
用awk进行计算并结合if判断
[root@m01 scripts]# cat test.sh
#!/bin/bash
x=$1
y=$2
awk -vn1=$x -vn2=$y 'BEGIN{print n1/n2}'
awk -vn1=$x -vn2=$y 'BEGIN{print n1*n2}'
awk -vn1=$x -vn2=$y 'BEGIN{print n1+n2}'
awk -vn1=$x -vn2=$y 'BEGIN{print n1-n2}'
[root@m01 scripts]# sh test.sh 26 8
3.25
208
34
18
4.循环
[root@m01 scripts]# cat DBJ.sh
#!/bin/bash
for n in {1..7}
do
echo "week$n带思远去找girl$n,大宝剑"
done
[root@m01 scripts]# sh DBJ.sh
week1带思远去找girl1,大宝剑
week2带思远去找girl2,大宝剑
week3带思远去找girl3,大宝剑
week4带思远去找girl4,大宝剑
week5带思远去找girl5,大宝剑
week6带思远去找girl6,大宝剑
week7带思远去找girl7,大宝剑