shell基础

发布时间 2023-08-16 14:55:55作者: Tsumiki

一.shell脚本

在 /etc/shells 中可以找到当前系统支持的shell脚本种类

 

 脚本用途

将简单的命令组合完成复杂的工作,自动化执行命令,提高工作效率

减少手工命令的重复输入,一定程度上避免人为错误

将软件或应用的安装及配置实现标准化

用于实现日常性的,重复性的运维工作,如:文件打包压缩备份,监控系统运行状态并实现告警等

 

脚本构成

脚本申明(解释器):第一行开头“#!/bin/bash”,表示此行以下的代码语句是通过/bin/bash程序来解释执行。#!/bin/bash为默认的解释器还有其他类型的解释器,#!/bin/python #!/bin/expect

注释信息:以#开头的语句表示为注释信息

可执行语句、命令:比如echo命令用于输出" "之间的字符串

 

脚本执行逻辑和方式

相对绝对路径

相对路径 

./cipan.sh    需要执行权限! chmod  777 cipan.sh

绝对路径

~/cipan.sh
 

指定解释器执行

bash cipan.sh

 

source 和 ‘.’ 启动 ,但是会在启动一个bash进程,影响当前环境

 

脚本可能发生的错误

1.命令错误:默认后续的命令还会继续执行,用bash -x进行检查

2.语法错误:可以使用bash -n 检查错误,错误的行数不一定准确

3.逻辑错误:只能自己去筛查

 

二.重定向与管道符

1)重定向

  类型              设备文件          文件描述编号          默认设备

标准输入        /dev/stdin           0                              键盘

标准输出        /dev/stdout         1                             显示器

标准错误输出 /dev/stderr         2                             显示器

 

标准输入:从该设备接收用户输入的数据

标准输出:通过该设备向用户输出的数据

标准错误:通过该设备报告执行出错的信息

重定向的意思就是,不通过标准输出到屏幕上,输出到自己指定的位置

类型                                      操作符                                用途
重定向输入                              <                          从指定的文件读取数据,而不是从键盘输入
重定向输出                             1>                         将输出结果保存到指定的文件(覆盖原有内容)
                                               >>                         将输出结果追加到指定的文件尾部
标准错误输出                         2>                         将错误信息保存到指定的文件(覆盖原有内容)
                                              2>>                        标准错误输出结果追加到指定的文件尾部
混合输出           &>(无论对错都可以重定向)   将标准输出、标准错误的内容保存到同一个文件中

2)多行重定向

Here Document 概述 使用 I/O 重定向的方式将命令列表提供给交互式程序或命令,比如 ftp、cat 或 read 命令。 HereDocument是标准输入的一种替代品, 可以帮助脚本开发人员不必使用临时文件来构建输入信息, 而是直接就地生产出一个文件并用作命令的标准输入。

EOF

—————————————————————————————————————————————————————————————————————————————————

—————————————————————————————————————————————————————————————————————————————————

 ————————————————————————————————————————————————————————————————————————————————

三.变量

1)常见shell变量类型

自定义变量:由用户自己定义,修改和使用

环境变量:由系统维护,用于设置工作环境

只读变量:只可以读取不可以更改

位置变量:通过命令行给脚本传递参数

预定义变量:Bash中内置的一类变量,不能修改 有些规定好的变量 放在那里让你使用

 2)变量命名要求

区分大小写

不能使程序中的保留字和内置变量:如:if, for,hostname 命令

只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线 “ - ”,和主机名相反

不要使用内置的变量,使用英文尽量使用词义通俗易懂,PATH

 自定义变量

 name='value'

变量名=变量值

直接字串:name='root'

变量引用:name="$USER"

命令引用:name=COMMAND 或者 name=$(COMMAND)

注意:变量赋值是临时生效,当退出终端后,变量会自动删除,无法持久保存,脚本中的变量会随着脚本结束,也会自动删除

 

变量引用:

$name

${name}

 

弱引用和强引用

"$name " 弱引用,其中的变量引用会被替换为变量值

'$name ' 强引用,其中的变量引用不会被替换为变量值,而保持原字符串

 

变量追加值

格式 变量名+=追加值

 

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

2.赋值时使用单引号(' ')只会被认为是字符 不会调用变量

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

4.{}可以分隔变量值

 

read -p

从键盘输入的内容变成变量

 

整数运算

expr和let只能进行整数的运算

格式: expr 变量1 运算符 变量2 [运算符 变量3]

运算符:

加法 +

减法 -

乘法 \ *

除法 /

取余 (取模)%

 

随机数生成

 1-100随机数

 

提取系统信息

 

环境变量

由系统提前创建,用来设置用户的工作环境

可以使用env查看环境变量

需要记住的常用环境变量

$USER 表示用户名称

$HOME 表示用户的宿主目录

$LANG 表示语言和字符集

$PWD 表示当前所在工作目录

$PATH 表示可执行用户程序的默认路径