shell脚本编写及变量

1. shell脚本编程概述

基本概念

  • 将要执行的命令按顺序保存到一个文本文件;

  • 给该文件可执行权限;

  • 可结合各种Shell控制语句以完成更复杂的操作;

2. shell的作用

Linux 系统中的 Shell 是一个特殊的应用程序,它介于操作系统内核与用户之间,充当 了一个“命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。 常见的 Shell 解释器程序有很多种,使用不同的 Shell 时,其内部指令、命令行提示符 等方面会存在一些区别。

可通过/etc/shells 文件了解当前系统所支持的 Shell 脚本种类

3. shell脚本的用途

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

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

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

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

3.1 shell脚本的组成

1. 脚本申明(解释器):第一行开头“#!/bin/bash”,表示此行以下的代码语句是通过/bin/bash程序来解释执行。
2. 注释信息:以#开头的语句表示为注释信息。
3. 可执行语句:比如echo命令用于输出“ ”之间的字符串。

执行结果:

3.2 脚本执行的逻辑及方法

脚本执行逻辑

  • 顺序执行:程序按从上到下顺序执行
  • 选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行
  • 循环执行:程序执行过程中需要重复执行多次某段语句

脚本执行方法

1. 直接调用shell解释器加上脚本名字 bash脚本名(不需要加上权限)

2. 路径/脚本 (需要权限)

指定路径方式执行有两种,一种是绝对路径的方式去执行,一种是相对路径的方式去执行(但是执行的前提一定是该脚本文件拥有执行的权限!)

(相对路径执行)

(绝对路径执行)

3. source(.)脚本名字 (不建议,会直接修改当前bash)

4. 将脚本文件放入$PATH中目录的其中一个目录,直接输入脚本名执行

将当前文件做个软连接放入或者使用cp复制到 /usr/local/bin目录下
直接输入脚本名执行脚本

4. 脚本错误

1.命令错误  (不会影响接下来的命令执行,但本条命令不执行)

2. 语法错误   (执行不了,直接影响脚本无法正常运行)

3. 逻辑错误    (只能自己去筛查代码的正确)

检查脚本错误

bash -x (模拟执行发现错误)

bash -n   (可检查出语法错误)

关于set 

set   -e 脚本出现错误立即停止

set -u    变量不存在不让执行

5.  重定向与管道符

5.1 重定向

类型设备文件文件描述编号默认设备
标准输入/dev/stdin0键盘
标准输出/dev/stdout1显示器
标准错误输出/dev/stderr2显示器

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

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

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

重定向的意思就是 ,不输出到默认设备上,输出到你指定的位置。

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

实例

重定向输入与输出修改密码

覆盖追加

混合输出:

5.2 管道符

管道符 |

将左侧的命令输出结果,作为右侧命令的输入(处理对象)可以 叠加使用

6. echo命令:打印输出内容

选项作用
-n不追加换行
-e\b    退格
\c    抑制更多的输出
\n    换行

\t    横向制表符

\v    纵向制表符

echo -n

echo -e \b

echo -e \n

6. 变量

6.1 变量的定义

Shell脚本的变量是什么?
变量是计算机语言中能储存计算结果或能表示值的抽象概念。保存将来会变化的数据,即使数据变

化,直接调用变量即可。

Shell 变量用来存放系统和用户需要使用的特定参数(值),而且这些参数可以根据用户的设定或

系统环境的变化而相应变化。通过使用变量,Shell 程序能够提供更加灵活的功能,适应性更强。

6.2 变量的类型

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

特殊变量:环境变量,只读变量,位置变量,预定义变量

环境变量:由系统维护,用于设置工作环境  (env可以看到所有)
只读变量:只可以读取不可以更改
位置变量:通过命令行给脚本传递参数
预定义变量:Bash中内置的一类变量,不能修改    有些规定好的变量 放在那里让你使用

环境变量

使用 env 命令可以查看到当前工作环境下的环境变量

配置文件:/etc/profile(全局生效)、~/.bash_profile(当前用户环境)

可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量

一旦子进程修改从父进程继承的变量,将会新的值传递给孙子进程

一般只在系统配置文件中使用,在脚本中较少使用

只读变量

变量值不允许修改(重新赋值)的情况

无法使用unset删除

最快方法重启

位置变量

  • 当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量。
  • $n: n为数字,$0代表命令本身,$1- $9代表带一个到第九个参数,十以上的参数需要使用大括号表示,比如第十个参数为${10}

6.3 变量的使用

设置变量

变量名=变量值(两边没有空格)

调用变量

echo$变量名

删除变量

unset 变量名

重新定义变量

变量名=变量名

追加变量

变量名+=变量值

6.4 赋值时使用符号

  • 双引号:允许通过$符号引用其他变量值(变量在双引号中可以识别,弱引用)

  • 单引号:禁止引用其他变量值, $视为普通字符 (变量单引号不被识别,强引用)

  • 反撇号:命令替换,提取命令执行后的输出结果,代表引用命令结果,效果等于$()

  • {}:定义变量名范围(一定不会错)

  • echo $$显示当前bash环境,pid号。

  • 定义变量时中间有特殊字符,如空格,可以使用单引号或双引号

7.  read -p

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

8. 预定义变量

$?代表上一次命令执行结果是否正确,0是正确,非0是错误
$0当前执行的脚本名字
$$当前bash的pid
$#代表位置参数总个数
$*代表返回所有参数(所有参数当成一个整体返回)
$@代表返回所有参数 (每个参数都是一个独立的个体返回)

9.  整数的运算

expr只能进行整数的运算

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

运算符:

加法 +

减法 -

乘法 \ *

除法 /

取余 (取模)%

(1) let var=算术表达式
let sum=1+2
sum=1+2
(2) $((var=算术表达式)) 和上面等价
((sum=1+2))
echo $sum
(3) var= $[算术表达式]

(4) var=$(expr arg1 arg2 arg3 ...)
(5) var= `expr arg1 arg2 arg3 ...`
(6) echo '算术表达式' | bc

这里举几例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值