shell 脚本

简介: shell 脚本

一,脚本概述

(一)脚本三种处理逻辑

1,顺序执行:程序按从上到下顺序执行

2,选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行

3,循环执行:程序执行过程中需要重复执行多次某段语句(已知次数 已知条件 死循环)

(二)脚本概念

脚本简单理解        就是命令的集合

将要执行的命令按顺序保存到一个文本文件,给该文件可执行权限,可结合各种Shell控制语句以完成更复杂的操作。

(三)脚本应用场景

重复性操作

交互性任务

批量事务处理

服务运行状态监控

定时任务执行

(四)脚本的构成

1,解释器 (脚本是用什么语言写的) 可以不写

2, 注释 (解释语句的含义) 可以不写

3, 执行语句

(五)脚本执行的方法

1,使用解释器 bash (不需要权限)

2,使用路径执行(需要加执行权限)

当以路径执行,权限不够

加上执行权限,再此以路径执行

3,source 和.执行(不需要权限)

使用前两种方式执行脚本会开启子 bash 去执行

使用source 和点会影响当前的bash环境

所以推荐用bash 解释器执行

(六)想让脚本的路径可以补全

做一个软连接

(七)脚本的报错

1,命令错误

命令出错 不会影响下面命令的执行

2,语法错误

3,逻辑错误

想要猫,得到狗

(八)脚本出错检测

1,bash -x 把脚本的每一步都执行一遍

2,bash -n 检查语法

不在当前目录下加绝对路径

(九)脚本的错误预防(set  -e    set   -u)

1,set   -e   只要 出错立即停止

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

二,重定向 与 管道符

(一)重定向

1,重定向定义

重定向的意思就是,不输出到默认设备上,输出到你指定的位置(文件 其他输出设备)

2,重定向类型

类型 设备文件 文件描述编号
标准输入 /dev/stdin 0
标准输出 /dev/stdout 1
标准错误输出 /dev/stderr 2

重定向类型  来源:

3, 将错误的和正确的一起重定向

例题:以下不能将正确和错误一起显示出来的是

[root@centos7 ~]#ls /data /xxx 1> /data/all.log 2>&1
[root@centos7 ~]#ls /data /xxx 2> /data/all.log 1>&2
[root@centos7 ~]#ls /data /xxx &> /data/all.log  
[root@centos7 ~]#ls /data /xxx >& /data/all.log  

[root@centos7 ~]#ls /data /xxx   2>&1 1> /data/all.log

1代表 正确输入
2代表 错误输入
&    代表混合

[root@centos7 ~]#ls /data /xxx   2>&1 1> /data/all.log    不可以

(二)标准输入重定向

(三)多行重定向

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

三,shell 变量

(一)shell 变量基础

1,常见 Shell 变量的类型包括

自定义变量:由用户自己定义,修改和使用
预定义变量:Bash中内置的一类变量    shell           不能修改    规定好的变量 放在那里让你使用

环境变量:由系统维护,用于设置工作环境      当前目录  当前主机名啊   $PATH    

只读变量:只可以读取不可以更改              只能不能修改    常量  

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

2,命名要求

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

(二)自定义变量  具体介绍

1,定义自定义变量  调用自定义变量

取消变量:

unset 变量名

2,变量相关符号

2.1,双引号 弱引用 可以识别变量

2.2,单引号 强引用 不能识别变量

2.3,{ } 定义变量名的 范围

2.4, `` 反撇 调用命令的执行结果 和$()功能一样

2.5,必须要用单引号,但想要显示变量(两个单引号 )

2.6, 四个符号 灵活应用

如: 同时ping 192.168.91网段的 所有ip

3,变量与别名

变量在一定程度可以当做别名使用

4,变量追加值

5,交互的去定义变量 read  -p

交互式的输入变量值,然后 使用变量

6,将自定义的变量全局生效  export

6.1 bash

bash:linux 桌面环境

bash作用: 输入命令bash  会进入当前bash的子bash     就是进入另一个桌面环境,当做出可能影响的操作时,直接exit 退出当前子bash     回到父bash

当你切换用户时  su -    和   su    之后的bash     都不是之前的子bash   都是新的bash

su -    和   su  区别:

su  不彻底  新用户  会继承老用户的  环境变量

6.2bash配置文件

一旦你登录 bash 环境 会读取以下四个文件 进行个性化配置

登录时进行操作,任何可以执行的命令都可以写进去

只对当前用户生效:

~/.bashrc      ~/.bash_profile

对系统里的所有人生效

/etc/profile     /etc/profile.d/*.sh

6.3 export

自定义的变量只能在当前bash 环境生效

想这个变量在所有的子(孙)bash 环境生效,加export(局部变量 变全局变量 )

7,整数变量的运算(4种写法)

运算符:

加法 +

减法 -

乘法 \ *      (*   是乘法     \ 转义,指表示原来的意思)

除法 /

取余 (取模)%

% 的意思,是除了之后取余数,如  6   %   3     值为0

                                                       100 %  33  值为1

               随机一个数(范围0到32767)  % 33  值为0到32(不可能是33  33可以被整除)

7.1 expr

expr只能进行整数的运算

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

7.2  bc  计算机

bc 能用小数

7.3    let

7.4  变量名=$[运算]; echo $变量名

7.5 加入变量

8,   取随机数值   (RANDOM    与取余 % )  

$RANDOM  这个变量取值范围:0-32767

(会在这个范围随机取数)

要求:取   1 到33随机数

RANDOM%33    可以得到0 到32的任意数值,因为0到32767   除以    33

余数只可能是0到   32  

9,启用颜色

10,生成一个电脑基础信息的脚本

可以通过sz命令    把脚本放到别的计算机去执行

(三)环境变量具体介绍

1,环境变量定义

  1. 由系统提前创建,用来设置用户的工作环境
  2. 可以使用env查看环境变量

2,需要记住的常用环境变量

$USER 表示用户名称

$HOME 表示用户的宿主目录

$LANG 表示语言和字符集

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

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

3,环境变量注意事项

  • 可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量
  • 一旦子进程修改从父进程继承的变量,将会新的值传递给孙子进程
  • 一般只在系统配置文件中使用,在脚本中较少使用

4,环境变量的全局配置文件

配置文件位置在

/etc/profile如果修改此文件会作用于所有用户

~/.bash_profile 用户独立的配置文件,修改这个文件只作用于当前用户

(四)只读变量readonly

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

无法使用 unset删除

最快方法重启

(五)位置变量

位置变量也称为位置参数,使用$1、$2、$3、…、$9 表示

就是字面意思,                根据脚本里的位置顺序,显示bash  脚本后对应的值

(六) 预定义(状态)变量

1,预定义变量  定义

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

bash 帮你定义好了 拿来用就可以了,你不需要知道为什么,记住

2,$*   和$@   都表示所有位置参数

3,$*   和$@   的区别

$* 把a到z 看成一个整体

$@ a 到 z 各自是一个整体

echo "$*"            将所有项当成一个值
echo "$@"            独立个体
echo "$#"            后面参数的个数

3.1实验认证

脚本3  是打印第一个位置参数

脚本1  和脚本2  的结果  都交给脚本3,   输出$1

两者结果不同

4,$?  表示前一条命令执行后的返回状态

只能是上一个命令   0是正确   非0  为不正确

5,$#:表示命令行中位置参数的总个数

6,$0:表示当前执行的脚本或程序的名称 当前脚本的名字

把脚本做软连接   会显示软连接的名字

相关文章
|
5月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
525 9
|
5月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
507 2
|
8月前
|
Shell
Shell脚本循环控制:shift、continue、break、exit指令
使用这些命令可以让你的Shell脚本像有生命一样动起来。正确使用它们,你的脚本就能像一场精心编排的舞蹈剧目,既有旋律的起伏,也有节奏的跳跃,最终以一场惊艳的表演结束。每一个动作、每一个转折点,都准确、优雅地完成所需要表达的逻辑。如此,你的脚本不只是冰冷的代码,它透过终端的界面,跳着有节奏的舞蹈,走进观众——使用者的心中。
316 60
|
11月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
5月前
|
数据采集 监控 Shell
无需Python:Shell脚本如何成为你的自动化爬虫引擎?
Shell脚本利用curl/wget发起请求,结合文本处理工具构建轻量级爬虫,支持并行加速、定时任务、增量抓取及分布式部署。通过随机UA、异常重试等优化提升稳定性,适用于日志监控、价格追踪等场景。相比Python,具备启动快、资源占用低的优势,适合嵌入式或老旧服务器环境,复杂任务可结合Python实现混合编程。
|
7月前
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
873 1
|
9月前
|
存储 Unix Shell
确定Shell脚本在操作系统中的具体位置方法。
这对于掌握Linux的文件系统组织结构和路径方面的理解很有帮助,是我们日常工作和学习中都可能使用到的知识。以上讲解详细清晰,应用简便,是每一个想要精通操作系统的计算机爱好者必备的实用技能。
276 17
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
347 1
|
10月前
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
962 25
|
9月前
|
Linux Shell
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
264 4