第 1 章 shell 基础
1.1 什么是 shell
Shell 是一个命令解释器, 它在操作系统的最外层, 负责直接与用户对话, 把用户的输入解释给操作系统, 并处理各种各样的操作系统的输出结果, 输出屏幕返回给用户.
1.1.1 shell 对话方式
交互的方式: 从键盘输入命令, 通过 / bin/bash 的解析, 可以立即得到 Shell 的回应, 一问一答的方式
非交互式: shell 脚本
1.2 为什么使用 shell 编程
作为一个合格的运维人员必须掌握一种或一种以上的脚本语言, shell 编程则是实现 Linux/UNIX 系统管理及自动化运维所必备的重要工具, 可以把繁琐重复的命令写到 shell 脚本中执行, 节约时间, 有效的提高运维人员的工作效率, 减少不必要的重复工作时间.
1.3 系统中的 shell
linux 系统默认 shell 是 bash
- [root@zeq ~]# cat /etc/shells
- /bin/sh
- /bin/bash
- /sbin/nologin
- /bin/dash
- /bin/tcsh
- /bin/csh
第 2 章 变量
2.1 什么是变量
x+y=20 x=10 y=? 未知数(变量)
一个未知数, 随时可以变化的量叫变量
2.2 变量的分类
2.2.1 普通变量(局部变量)
只能在当前环境下使用, 可以通过 export 命令临时把普通变量变为环境变量使用
- [root@zeq ~]# ip=10.0.0.201 给变量赋值(把数据存放到变量中)
- [root@zeq ~]# echo $ip
- 10.0.0.201
2.2.2 环境变量(全局变量)
1. 大写
2. 系统定义的
3. 在大部分地方可以使用
2.2.3 特殊变量
$1 $2 $ 数字 $ 后数字是几代表 shell 脚本第几个参数
$# shell 脚本中参数的个数
判断脚本的参数个数
$? 上一个命令的执行结果(返回值)
0 执行正确
非 0 执行失败
$0 脚本文件名
- [root@zeq ~]# mkdir -p /server/scripts/
- [root@zeq ~]# cd /server/scripts/
- [root@zeq ~]# vim /server/scripts/cal.sh
- #!/bin/bash
- [root@zeq ~]# awk 'BEGIN{print 1/2}'
- 0.5
- [root@zeq ~]# awk -vnum1=10 -vnum2=20 'BEGIN{print num1/num2 }' 这里变量为 num1 和 num2
- 0.5
- [root@zeq]# vim cal.sh
- #!/bin/bash
- n1=10
- n2=20
- 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@zeq /server/scripts]# sh cal.sh
- 30
- -10
- 200
- 0.5
- [root@zeq /server/scripts]# vim cal.sh
- #!/bin/bash
- 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@zeq /server/scripts]# sh cal.sh 10 20 后面要跟上两个参数才能执行成功, 参数之前加空格
- 30
- -10
- 200
- 0.5
- [root@zeq /server/scripts]# read -p "input num1:" n1
- input num1:zeq
- [root@zeq /server/scripts]# echo $n1
- zeq
- [root@zeq /server/scripts]# vim cal.read.sh
- #!/bin/bash
- 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 }'
- [ -d /data ]
- [ -f /data ]
- [root@zeq /server/scripts]# [ -d /data ]
- [root@zeq /server/scripts]# echo $? $? 特殊变量, 0 代表执行正确, 非 0 执行失败
- 0
- [root@zeq /server/scripts]# [ -d /data123 ]
- [root@zeq /server/scripts]# echo $?
- 1
- -eq equal ==
- -ne not equal !=
- -gt great than>
- -ge great equal>=
- -lt less than <-le less equal <=
- [root@zeq /server/scripts]# [ 10 -eq 10 ]
- [root@zeq /server/scripts]# echo $?
- 0
- [root@zeq /server/scripts]# [ 10 -gt 10 ]
- [root@zeq /server/scripts]# echo $?
- 1
- [root@zeq /server/scripts]# [ 10 -ge 10 ]
- [root@zeq /server/scripts]# echo $?
- 0
- [root@zeq /server/scripts]# cat pan.sh
- #!/bin/bash
- if [ $# -ne 2 ];then
- echo "输入两个数字"
- fi
- [root@zeq /server/scripts]# cat cal.sh
- #!/bin/bash
- n1=$1
- n2=$2
- if [ $# -ne 2 ];then
- 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@zeq /server/scripts]# sh cal.sh
- USAGE: cal.sh num1 num2
- [root@zeq /server/scripts]# sh cal.sh 120 20
- 140
- 100
- 2400
- 6
- [root@zeq /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@zeq /server/scripts]# sh comp.sh 10 20
- 10 <= 20
- [root@zeq /server/scripts]# sh comp.sh 10 10
- 10 <= 10
- [root@zeq /server/scripts]# sh comp.sh 100 10
- 100> 10
来源: https://www.cnblogs.com/zeq912/p/9501915.html