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:表示当前执行的脚本或程序的名称 当前脚本的名字

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

相关文章
|
1月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
75 1
|
17天前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
40 2
6种方法打造出色的Shell脚本
|
3天前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
13 1
|
8天前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
22 2
|
22天前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
43 6
|
18天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
1月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
65 12
|
1月前
|
存储 运维 监控
自动化运维:使用Shell脚本简化日常任务
【9月更文挑战第35天】在IT运维的日常工作中,重复性的任务往往消耗大量的时间。本文将介绍如何通过编写简单的Shell脚本来自动化这些日常任务,从而提升效率。我们将一起探索Shell脚本的基础语法,并通过实际案例展示如何应用这些知识来创建有用的自动化工具。无论你是新手还是有一定经验的运维人员,这篇文章都会为你提供新的视角和技巧,让你的工作更加轻松。
49 2
|
2月前
|
Shell
shell脚本变量 $name ${name}啥区别
shell脚本变量 $name ${name}啥区别
|
2月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
430 2