文章目录

  • 一.shell脚本
  • 1.shell脚本基础
  • 2.重定向和管道符
  • 2.1重定向
  • 2.2管道符
  • 3.变量
  • 3.1变量类型
  • 3.2变量命名要求
  • 3.3read 变量
  • 3.4整数的运算
  • 3.5 位置变量
  • 3.6预定义(状态)变量
  • 4.条件语句
  • 4.1 test 或者[ ]
  • 4.2 数字比较
  • 4.3字符串比较
  • 4.4逻辑测试(短路运算)
  • 4.5if elif else
  • 4.6case
  • 4.7echo命令
  • 5.循环
  • 5.1for循环
  • 5.2 while循环
  • 6.总结


一.shell脚本

1.shell脚本基础

Linux 系统中的 Shell 是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个“命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。
shell脚本是将linux命令写入一个文件中,直接执行该文件即可执行文件里的所有内容,程序执行顺序有3种

  1. 顺序执行:程序按从上到下顺序执行
  2. 选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行
  3. 循环执行:程序执行过程中需要重复执行多次某段语句
    使用shell脚本的命令有三种
    1:绝对路径执行(需要有执行权限)
    2:shell语言+文件名
    3:source+文件名
    shell错误也有3种
    1:命令错误
    命令出错不会影响接下来的命令继续
    2:语法错误
    会影响接下来的命令继续
    3:逻辑错误
    只能自己去筛查

2.重定向和管道符

2.1重定向

重定向的的意思就是不输出到屏幕上,而是直接输入到你指定的位置

linux shell 脚本 redis incr linux shell 脚本里详细信息_linux


linux shell 脚本 redis incr linux shell 脚本里详细信息_shell脚本_02


多行重定向:即EOF作为标志并且你想输入啥都会进去,最后用EOF作为结尾告诉系统自己输入好了。

2.2管道符

管道符的作用是传参,将前一个命令获得的输出作为参数传给下一个命令执行,可叠加使用。

3.变量

3.1变量类型

常见的变量类型有
自定义变量:由用户自己定义,修改和使用
环境变量:由系统维护,用于设置工作环境
只读变量:只可以读取不可以更改
位置变量:通过命令行给脚本传递参数
预定义变量:Bash中内置的一类变量,不能修改

3.2变量命名要求

1.区分大小写
2.不能使程序中的保留字和内置变量:如:if, for,hostname 命令 a=
3. 只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线 “ - ”,和主机名相反
4.不要使用内置的变量,使用英文尽量使用词义通俗易懂,PATH
变量名=“变量值”
变量值赋予变量名

1.赋值时使用双引号(" ")可以直接调用变量

2.赋值时使用单引号(’ ')linux shell 脚本 redis incr linux shell 脚本里详细信息_shell脚本_03

3.赋值时使用(``反撇在tab上面)命令替换,提取命令执行后的输出结 果$( ) 用法相同

4.{}可以分隔变量值

3.3read 变量

将自己输入的内容作为变量

用法:read -p “随意输入”:“与随意输入”有关的变量

linux shell 脚本 redis incr linux shell 脚本里详细信息_运维_04

3.4整数的运算

expr只能进行整数的运算

格式: expr 变量1 运算符 变量2 [运算符 变量3]
运算符:
加法 +
减法 -
乘法 \ *
除法 /
取余 (取模)%

3.5 位置变量

$(数字)
即第几行的内容作为变量
$0表示脚本自身

3.6预定义(状态)变量

  • $*:表示所有位置参数的内容看成一个整体返回 返回所有 (45667) $1
  • $@:表示所有位置参数的内容分割成n份,每份作为一个独立的个体返回 返回所有 4 5 6 6 7
  • $?:表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常
  • $#:表示命令行中位置参数的总个数
  • $0:表示当前执行的脚本或程序的名称 当前脚本的名字
  • $$:当前进程id
  • $!: 后台任务最后一个id

4.条件语句

4.1 test 或者[ ]

后面加上判断的内容,测试完之后输入echo$?如果出来0则代表正确,如果出来非0则代表不正确。

linux shell 脚本 redis incr linux shell 脚本里详细信息_重定向_05


当测试执行权限是,测的是是否真的能执行的权限(注意root用户)

4.2 数字比较

[ 整数1 操作符 整数2 ] 公式

  • -eq:第一个数等于(Equal)第二个数
  • -ne:第一个数不等于(Not Equal)第二个数
  • -gt:第一个数大于(Greater Than)第二个数
  • -lt:第一个数小于(Lesser Than)第二个数
  • -le:第一个数小于或等于(Lesser or Equal)第二个数
  • -ge:第一个数大于或等于(Greater or Equal)第二个数

4.3字符串比较

常用的测试操作符

  • =:字符串内容相同
  • !=:字符串内容不同,! 号表示相反的意思
  • -z:字符串内容为空
  • -n: 字符是否存在

4.4逻辑测试(短路运算)

格式1:[ 表达式1 ] 操作符 [ 表达式2 ] …
格式2:命令1 操作符 命令2 …

常见条件

  • -a或&&:逻辑与,“而且”的意思全真才为真
  • -o或||:逻辑或,“或者”的意思一真即为真

当判断出非的时候才会往下走

4.5if elif else

提出条件的语句(if)后面跟上判断条件,then执行命令
如果出现多分支就用else再接行then执行命令,或者else把所有情况都排除,then接命令,最后需要接上fi作为结尾

4.6case

case 变量引用 in
PAT1)
分支1
;;
PAT2)
分支2
;;

*)
默认分支
;;
part1和part2里面代表的是情况
* 任意长度任意字符
? 任意单个字符
[0-9] 指定范围内的任意单个字符
| 或者,如: a|b

4.7echo命令

常用的echo转义符:

echo -n 表示不换行输出

echo -e 表示输出转义符

linux shell 脚本 redis incr linux shell 脚本里详细信息_系统安全_06

5.循环

将某代码段重复运行多次,通常有进入循环的条件和退出循环的条件

重复运行次数

  • 循环次数事先已知
  • 循环次数事先未知

5.1for循环

命令:for i in (变量)
do (执行的命令)
done (结束)
for循环是根据次数进行操作

5.2 while循环

相对于for,需要知道循环次数
我们只知道停止条件,不知道次数,就需要使用while
直到达到条件

6.总结

用的较多的是变量名,位置变量,预定义变量,循环,条件判断。