1.为什么要学shell编程?
linux系统中会大量使用shell,工作中也会自动化实现业务,列如自动备份,监控,批量安装
shell编程是必须要会的,也是最简单的编程语言。是运维人员具备的基本本领
2.什么是shell?
shell就是一个解释器,命令行的命令以及脚本,都会通过shell解释,传给操作系统,再传给用户
解释器是在创建用户是指定的解释器 useradd -s 指定解释器
3.shell的分类 (CentOs7支持的解释器)
[root@king ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
很多都淘汰了,现在默认bash
4.Centos7默认/bin/bash解释器
5.什么是shell脚本?
把程序,命令放在文件里执行,这个文件就称之为shell脚本文件
工作中最多的就是编程写脚本,然后存放在文件里。
书写脚本编程习惯:
1.以.sh结尾
2.脚本开头第一行 #!/bin/bash 脚本内容有谁解释。
由于linux下默认是bash,所以不写也一样
3.
6.shell的变量:
a. 全局变量(环境变量)
在整个系统中生效,一般是大写,系统中默认存在一些这样的变量
自定义环境变量:
export OLDBOY="I am oldboy." 将其放到/etc/profile 或者/etc/bashrc 推荐后者
b.局部变量(普通变量)
是编写shell脚本最常用的变量
变量名=值
a=1
变量名:数字、字母、下划线,不能以数字开头
= 等号 ,在这里叫赋值符,把什么东西给谁谁 赋值符号两边不能有空格
值: 东西,变量内容
引用内容的符号 :单引号、双引号、反引号(可以解析命令)、不加引号
a=1
let y="$a+1"
echo $y 即输出的是1+1=2,let 是让y的环境变量里自动相加 不加let ,结果就是1+1
7.表达式
【 表达式 】 中括号表达式
在这里,中括号里的内容根中括号两边都得有空格,
字符串要加双引号
[ "a" = "a" ] && echo 1 ||echo 0
如果成立,打印1,不成立则打印0 &&前边成立,这边输出,不成立,不输出(跟屁虫)
|| 前边成立,这边不输出,前边不成立,这边输出(杠精)
整数表达式:
> -gt
>= -ge
< -lt
<= -le
不等于 -ne
等于 -eq
1)整数表达式符,两端必须有空格
2)中括号里边两端必须有空格
3)变量和比较的内容,不需要加引号
4)字符串需要加双引号
字符表达式:
-z 变量内容长度为0时,为真(正确)。zero
-n 变量内容长度【不】为0时,为真(正确)。not zero
a == a 字符串是否相同
说明:
1)字符串要加双引号
判断句:
如果 。。。。。那么。。。。。。
a=
(变量)
if [ 表达式 ]
then
(那么)
echo
elif
(要么/或者)
echo
else
(否则)
echo
fi
read 命令 读取用户 输入
-p "提醒(请你输入什么什么):" 空格 内容
-t “多长时间内等待输入”
9.for循环
for n in 取值列表
do
执行命令
done
课后练习;
1.比较整数大小
[root@king ~]# cat 1.sh
#! /bin/bash
read -p "请输入两个正整数,我帮你比大小:" a b
if [ $a -gt $b ]
then
echo "a>b"
elif [ $a -eq $b ]
then
echo "a=b"
else
echo "a<b"
fi
[root@king ~]#
2.每周六日区旅游,其他时间上课
[root@king ~]# cat 2.sh
#! /bin/bash
if [ $(date +%w) == 6 ]
then
echo "去旅游"
else
echo "滚回去上课"
fi
[root@king ~]#
3.取出当前系统IP地址,判断是否为10.0.0.31,如果是,提示正确,反之,提示错误
ip add|sed -nr 's#.*inet (.*)/24 brd.*$#\1#gp'
[root@king ~]# cat 3.sh
#! /bin/bash
a="$(ip add|sed -nr 's#.*inet (.*)/24 brd.*$#\1#gp')"
if [ "$a" == "10.0.0.31" ]
then
echo "正确"
else
echo "错误"
fi
[root@king ~]#
4.打印10.0.0.1--10.0.0.254 共254个IP ,当IP为系统IP时,给出该IP时系统IP的提示提示
[root@king ~]# cat 4.sh
#! /bin/bash
for n in 10.0.0.{1..254}
do
echo $n
if [ $n == "10.0.0.201" ]
then
echo "此IP为系统IP"
fi
done
网友评论