第1章 shell编程基础
1.1 书写脚本
/server/scripts
#!/bin/bash
get ip address
ip=`hostname -I|awk '{print $1}'`
mkdir && backup
mkdir -p /backup/$ip
tar zcf /backup/$ip/etc-`date +%F`.tar.gz /etc/
1.2 变量
1.2.1 什么是变量?
x + y = 10 x=20 y=? 未知数(变量)
1.2.2 变量命名规则:
不能以数字开头
1.2.3 赋值(把数据存放在变量中)
[root@oldboyedu50-lnb /server/scripts]# ip=10.0.0.200
[root@oldboyedu50-lnb /server/scripts]# echo $ip
10.0.0.200
1.3 变量分类:
1.3.1 普通变量(局部变量)
1.3.2 环境变量(全局变量)
1.大写
2.系统定义的
3.在大部分地方可以使用
PATH PS1 LANG
实例1-1 env结果的第1列
awk
env |awk -F= '{print $1}'
sed
env |sed 's#=.*##g'
grep
env|egrep '^[A-Z0-9_]+' -o
env|egrep '^[^=]+'
1.4 全局变量与局部变量区别
[root@oldboyedu50-lnb /server/scripts]# unset OLDBOY
[root@oldboyedu50-lnb /server/scripts]# env |grep OLDBOY
[root@oldboyedu50-lnb /server/scripts]# OLDBOY=10
[root@oldboyedu50-lnb /server/scripts]# echo $OLDBOY
10
[root@oldboyedu50-lnb /server/scripts]# cat show.sh
echo $OLDBOY
[root@oldboyedu50-lnb /server/scripts]# sh show.sh
[root@oldboyedu50-lnb /server/scripts]# source show.sh
10
[root@oldboyedu50-lnb /server/scripts]# . show.sh
10
1.5 特殊变量:(重点)
[root@oldboyedu50-lnb /server/scripts]# week=6
[root@oldboyedu50-lnb /server/scripts]# echo $week
6
[root@oldboyedu50-lnb /server/scripts]# echo $weekday
6day
实例1-2 书写一个计算器 加减乘除
变量中 把两个数字放在变量中
[root@oldboyedu50-lnb /server/scripts]# n1=10
[root@oldboyedu50-lnb /server/scripts]# n2=20
[root@oldboyedu50-lnb /server/scripts]# awk 'BEGIN{print n1/n2}'
awk: fatal: division by zero attempted
命令行中的变量 放在awk中使用
[root@oldboyedu50-lnb /server/scripts]# awk 'BEGIN{print n1,n2}'
[root@oldboyedu50-lnb /server/scripts]# awk -vnum1=10 'BEGIN{print num1 }'
10
[root@oldboyedu50-lnb /server/scripts]# awk -vnum1=10 -vnum2=20 'BEGIN{print num1/num2 }'
0.5
实例1-3 书写脚本计算10与20的加减乘除
cal.sh
#!/bin/bash
n1=10
n2=30
awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1+num2 }'
awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1-num2 }'
awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1*num2 }'
awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1/num2 }'
1.5.2 vim批量操作
1.进入批量编辑模式(可视块)
2.选择 批量增加的范围
3.按 shift + i 进行修改
4.按esc 退出等等
1.6 特殊符号:
$1 $2 $数字 awk:第1列 第2列 第3列
shell脚本:第1个参数
$0 awk:整行
shell脚本:文件名
$# 判断脚本的参数个数
$? 上一个命令的执行结果(返回值)
0 执行正确
非0 执行失败
[root@oldboyedu50-lnb /server/scripts]# cat cal.sh
#!/bin/bash
n1=$1
n2=$2
awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1+num2 }'
awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1-num2 }'
awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1*num2 }'
awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1/num2 }'
[root@oldboyedu50-lnb /server/scripts]# sh cal.sh 10 20
30
-10
200
0.5
实例1-4 cal-read.sh 通过read命令实现 n1 n2赋值
#!/bin/bash
read -p "input num1,num2:" n1 n2
awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1+num2 }'
awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1-num2 }'
awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1*num2 }'
awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1/num2 }'
1.7 判断 if
1.7.1 如果/oldboy 目录存在 显示 /oldboy dir exist
# ls /oldboy/ && echo dir exist
1.7.2 如果/oldboy 不存在 则创建这个目录
[root@oldboyedu50-lnb /oldboy]# cd /oldboya/ || mkdir -p /oldboya
-bash: cd: /oldboya/: No such file or directory
[root@oldboyedu50-lnb /oldboy]# ll -d /oldboya/
drwxr-xr-x 2 root root 4096 Aug 17 12:16 /oldboya/
实例1-5 判断文件目录是否存在
[root@oldboyedu50-lnb /oldboy]# [ -d /oldboy ] && echo dir exist
dir exist
[root@oldboyedu50-lnb /oldboy]# [ -d /oldboy ] || mkdir -p /oldboy
条件表达式:
-eq equal ==
-ne not equal !=
-gt great than >
-ge great equal >=
-lt less than <
-le less equal <=
1.7.3 命令是否执行正确
[root@oldboyedu50-lnb /oldboy]# [ 10 -eq 10 ]
[root@oldboyedu50-lnb /oldboy]# echo $?
0
[root@oldboyedu50-lnb /oldboy]# [ 10 -gt 10 ]
[root@oldboyedu50-lnb /oldboy]# echo $?
1
[root@oldboyedu50-lnb /oldboy]# [ 10 -ge 10 ]
[root@oldboyedu50-lnb /oldboy]# echo $?
0
[root@oldboyedu50-lnb /oldboy]# [ -d /oldboy ]
[root@oldboyedu50-lnb /oldboy]# echo $?
0
[root@oldboyedu50-lnb /oldboy]# [ -d /oldboyaaa ]
[root@oldboyedu50-lnb /oldboy]# echo $?
1
实例1-6 判断脚本的参数个数,如果不是2则提示请输入两个数字
[root@oldboyedu50-lnb /server/scripts]# cat pan.sh
#!/bin/bash
if [ $# -ne 2 ];then
echo "输入两个数字"
fi
实例1-7 给计算器(参数传递)增加一个条件,判断脚本的参数个数,如果不是2则,提示请输入两个数字
[root@oldboyedu50-lnb /server/scripts]# cat cal.sh
#!/bin/bash
n1=$1
n2=$2
if [ $# -ne 2 ];then
echo "USAGE: $0 num1 num2"
exit
fi
awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1+num2 }'
awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1-num2 }'
awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1*num2 }'
awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1/num2 }'
[root@oldboyedu50-lnb /server/scripts]# sh cal.sh
USAGE: cal.sh num1 num2
[root@oldboyedu50-lnb /server/scripts]# sh cal.sh 120 20
140
100
2400
6
实例1-8 comp.sh输入两个数字:
1.如果n1大于n2
n1 > n2
2.如果n1不大于n2
n1 <= n2
[root@oldboyedu50-lnb /server/scripts]# cat comp.sh
#!/bin/bash
n1=$1
n2=$2
if [ $n1 -gt $n2 ];then
echo "$n1 > $n2"
else
echo "$n1 <= $n2"
fi
[root@oldboyedu50-lnb /server/scripts]# sh comp.sh 10 20
10 <= 20
[root@oldboyedu50-lnb /server/scripts]# sh comp.sh 10 10
10 <= 10
[root@oldboyedu50-lnb /server/scripts]# sh comp.sh 100 10
100 > 10
转载于:https://blog.51cto.com/13858927/2161289