day28-Shell脚本基础
SHELL编程基础
三小时光速入门
因为集群架构会用到shell编程基础,提前讲一丢丢。
shell编程
1. 为什么学shell编程?
Linux系统中大量的使用shell,工作中需要自动化实现业务。例:每天晚上自动备份、监控CPU、批量安装、自动安装服务。你就需要shell
shell编程是linux运维人员必须要会的编程语言,最简单的编程语言。(没有之一)
编程也是运维人员必须具备本领
shell 、python 编程也是运维人员必须具备本领,特别是高级运维人员
2. 什么是shell?
shell是一个解释器,命令行的命令以及脚本都会通过shell进行解释,传给操作系统,处理后输出给用户
bin/bash 创建用户时系统指定的翻译官
3. shell分类
1、bourne shell
2、C shell
[root@oldboyedu ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
4. c7 :默认shell
[root@oldboyedu ~]# echo $SHELL
/bin/bash
5. 什么是shell 脚本
一般我们会把程序、命令放入文件里执行,这个文件我们就称为shell脚本
工作中最多的编程写脚本,存放在文件里
6. shell 变量
a. 全局变量(环境变量)
在整个系统中生效、一般是大写、系统中会默认存在一些这样的变量,用于满足系统和程序运行的需求
[root@oldboyedu ~]# echo $PS1
[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\] \[\e[31;1m\]\w\[\e[0m\]]\$
[root@oldboyedu ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
自定义环境变量:
方法1
export OLDBOY="I am oldboy"
方法2
OLDBOY="I am oldboy"
export OLDBOY
永久生效:
/etc/peofile会被/.bash_profilef会被/.banshrc会被/etc/bashrc覆盖
把变量放到上述文件里
安装JAVA服务时候会配置环境变量
b.局部变量(普通变量)
是编写shell脚本最常用的变量。
变量名=值
a=1
变量名:数字、字母、下划线,不能是数字开头。常见的是字母开头
= 等号 :赋值符,把什么东西给谁,赋值符号两边不能有空格
值:就是具体分东西,变量内容
引用内容的符号:单引号,双引号,反引号,不加引号
let 让引号中的东西进行计算
7. 表达式
[ 表达式 ] 表达式
中括号两端(两边)必须有空格
[root@oldboyedu ~]# [ "a" = "a" ] && echo 1||echo 0
1
[root@oldboyedu ~]# [ "a" = "b" ] && echo 1||echo 0
0
[root@oldboyedu ~]# [ "a" = "b" ] && echo 1||echo 0
0
[root@oldboyedu ~]# [ "a" = "a" ] && echo 1||echo 0
1
[root@oldboyedu ~]# [ "a" = "b" ] && echo 1||echo 0
0
[root@oldboyedu ~]# [ "a" = "1" ] && echo 1||echo 0
0
前面正确输出1错误输出0
整数表达式 | 字符 |
---|---|
> | -gt |
>= | -ge |
< | -lt |
<= | -le |
= | -eq |
不等于 | -ne |
[root@oldboyedu ~]# a=1
[root@oldboyedu ~]# [ "a" eq 1 ] && echo 1
-bash: [: eq: binary operator expected
[root@oldboyedu ~]# [ "a" -eq 1 ] && echo 1
-bash: [: a: integer expression expected
[root@oldboyedu ~]# [ "a" -eq 1 ] && echo 1
-bash: [: a: integer expression expected
[root@oldboyedu ~]# [ $a -eq 1 ] && echo 1
1
[root@oldboyedu ~]# [ $a -ne 1 ] && echo 1
[root@oldboyedu ~]# [ $a -ne 2 ] && echo 1
1
[root@oldboyedu ~]# [ $a -ne 3 ] && echo 1
1
[root@oldboyedu ~]# [ $a -eq 3 ] && echo 1
[root@oldboyedu ~]# [ $a -eq 3 ] && echo 1
1)整数表达式,两端必须要有空格
2)中括号里面两端必须要有空格
3)变量和比较的内容不需要加引号
字符表达式
-z 变量内容长度内容为0时,为真。 zero
-n 变量长度不为0时,为真。 not zero
a == a 双等号 字符串是否相等
说明:
1)字符串双引号
2)
oldboy="I am oldboy"
[root@oldboyedu ~]# [ -z "$oldboy" ] &&echo 真 || echo 假
假
[root@oldboyedu ~]# [ -z "$oldboy" ] &&echo 真 || echo 假
假
[root@oldboyedu ~]# oldboy=""
[root@oldboyedu ~]# [ -z "$oldboy" ] &&echo 真 || echo 假
真
[root@oldboyedu ~]# [ -n "$oldboy" ] &&echo 真 || echo 假
假
[root@oldboyedu ~]# [ -n "$oldboy" ] &&echo 真 || echo 假
假
[root@oldboyedu ~]# [ -z "$oldboy" ] &&echo 真 || echo 假
真
8. shell判断句 :
如果 ....那么 ....
if 判断句语法:
if [ 表达式 ]
then
fi
elif 多条件
书写脚本习惯:
1 以.sh结尾
2 脚本开头第一行 #!/bin/bash 脚本内容由谁解释
由于linux下默认是bash 所以也可以不用写着一行
read 命令 读取用户输入
-p “提醒“
-t “多长时间内等待输入“
[root@oldboyedu ~]# vim test.sh
1 #!/bin/bash
2 read -p "请输入一句话" boy
3 if [ "$boy" == "潜力股" ]
4 then
5 echo "先和你谈谈朋友"
6 else
7 echo "白白"
8 fi
输入两个整数,比较大小
[root@oldboyedu ~]# vim daxiao.sh
1 #!/bin/bash
2 read -p “输入整数:” a b
3 if [ "$a" -gt "$b" ]
4 then
5 echo "$a>$b"
6 elif [ "$a" -lt "$b" ]
7 then
8 echo "$a<$b"
9 else
10 echo "$a=$b"
11 fi
特殊位置变量
$1脚本文件的第一个参数
$2 脚本文件的第二个参数
另一种方法
#!/bin/bash
a=$1
b=$2
if [ "$a" -gt "$b" ]
then
echo "$a>$b"
elif [ "$a" -lt "$b" ]
then
echo "$a<$b"
else
echo "$a=$b"
fi
9. for 循环
for n in 取值列表
do
执行命令
done