初识shell脚本

本文详细介绍了Shell脚本的基础概念、应用场景,重点讲解了变量的定义、操作、命名规则,以及重定向和管道的使用。涵盖了自定义变量、输入输出重定向、环境变量和只读变量等内容,适合shell初学者和高级用户参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,Shell 脚本概述

1.1 shell 脚本的概念

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

1.2 Shell 脚本应用场景

  • 重复性操作
  • 交互性任务
  • 批量事务处理
  • 服务运行状态监控
  • 定时任务执行

1.3 Shell 的作用

Shell --命令解释器,介于系统内核与用户之间,一种被称为解释性语言或者脚本语言的计算机语言。充当“翻译官”的作用
Linux 系统中运行的一种特殊程序,用户登录Linux系统时,自动加载一个Shell程序
Linux 系统中默认使用的Shell程序时Bash,文件位于 /bin/bash
不同Shell 的内部指令,运行环境会有区别
在这里插入图片描述

1.4 Shell 基本的构成

  • 脚本声明
  • 注释信息
  • 可执行语句
    我们新建一个脚本用.sh结尾命名
    在这里插入图片描述
    在这里插入图片描述

给他一个可执行权限
在这里插入图片描述

1.5 脚本的执行

bash test.sh
文件名直接执行(绝对路径或者相对路径执行)
source text.sh或 . test.sh执行
在这里插入图片描述

1.6 上述执行方法的区别

bash +脚本名:新开了一个bash环境,然后在这个新的bash环境中运行脚本内程序

文件名直接执行:这个方法是将脚本作为一个可执行程序,所以,要写脚本的绝对路径或者相对路径。由于脚本本身作为可执行程序,所以,会创建名为脚本名(test.sh) 的子进程

source或者点 " . ": 这两个命令都是在当前 shell 环境下,使用当前的解释器读取并执行命令,不会新开一个shell 环境或者 其他的子进程。由于这两个命令都是将 脚本作为参数,所以,不需要脚本有 执行权限x

将之前的脚本内容修改,加上 ‘sleep 1000’
在这里插入图片描述
用pstree命令查看进程树

在这里插入图片描述
bash运行脚本后,打开另一个终端,查看进程树
在这里插入图片描述
用bash命令新开了一个bash环境执行了脚本

用./tesh.sh运行脚本后,查看进程树
在这里插入图片描述
可以看到新开了一个tesh.sh的子进程,子进程下面有sleep进程

source text.sh运行脚本
在这里插入图片描述

是直接在当前bash环境下执行sleep进程

1.7 重定向操作

1.7.1交互式硬件设备

  • 标椎输入: 从该设备接收用户输入的数据
  • 标椎输出:通过该设备向用户输出数据
  • 标椎错误输出:通过该设备报告执行出错信息
类型设备文件文件描述编号默认设备
标椎输入/dev/stdin0键盘
标椎输出/dev/stdou1显示器
标椎错误输出/dev/stderr2显示器

1.7.2 重定向操作

类型操作符用途
重定向输入<从指定的文件读取,而不是从键盘输入
覆盖重定向输出> 或者 1>将正确的输出的结果保存到指定文件(覆盖原有内容)
追加重定向输出>> 或者 1>>将正确的输出的结果保存到指定文件(追加在文件尾部)
覆盖标椎错误输出2>将错误的输出的结果保存到指定文件(覆盖原有内容)
追加标椎错误输出2>>将错误的输出的结果保存到指定文件(追加在文件尾部)
覆盖混合输出&>将标准输出,标准错误的内容保存到同一文件(覆盖原有内容)
追加混合输出&>>将标准输出,标准错误的内容保存到同一文件(追加在文件尾部)
操作符用途
>&2 或者 1>&2将标准输出重定向到标准错误(即,让正确输出可以被 2> 收集)
2>&1将标准错误输出重定向到标椎输出(即,让错误的输出可以被 > 收集)

1,重定向输入
创建文件a,输入内容123

[root@caoyuzhou ~]# cat < a abc #以文件a为输入设备
[root@caoyuzhou ~]# cat a abc   #以键盘为输入设备

其表示意义不一样
在这里插入图片描述
2,标准重定向输出
如果前面命令返回值为0(即,命令正确),则将结果重定向输出到指定文件

返回值: 命令运行正确,则返回值为0 .命令运行错误,则返回非 0 值。可以用echo $? 查看上一条命令的返回值
在这里插入图片描述

在这里插入图片描述
ls +是我乱输的,echo返回值为非0,表示不成功

3,标椎错误输出

接收错误输出的信息(命令返回值为 非0 值),重定向到指定文件
在这里插入图片描述
在这里插入图片描述
可以看到返回值还是2

1.8 管道操作符号

管道操作符号“|”,将左侧命令输出结果,作为右侧命令的处理对像
命令1 | 命令2 【……|命令n】
在这里插入图片描述
管道符号加上xargs 可将前面的结果作为参数输出给后面的命令
在这里插入图片描述
如果不加管道符号,则会删除失败
在这里插入图片描述
并且用echo $?查看是执行成功的

二,Shell 脚本变量

2.1 变量概述

2.1.1 定义:

变量就是会变的量。可以通过变量名得到变量值。在内存上开辟一个记录数据的空间,给它起个名字,如name,num 等,这些就是变量名。而存放在该空间的数据就是变量的值。

2.1.2 变量的格式

变量名=变量值

2.1.3 变量命名规则

  • 变量名必须是以字母或下划线开头,名字中间只能由字母,数字,下划线"_" 组成,不能有小数点,特殊字符,空格,标点符号等。
  • 变量名的长度不得超过255 个字符。
  • 变量名在有效范围内必须是唯一的。
  • 变量名不能和系统命令,系统变量等冲突。
  • 变量名可以将开头字母打下,以防和系统命令等冲突。

2.1.4 查看变量名

用echo $变量名,查看变量的值
在这里插入图片描述

使用set查看当前Shell里所有变量

在这里插入图片描述

2.2 自定义变量

删除变量格式:
unset 变量名
在这里插入图片描述

三种引号:
双引号 “”:允许通过$符号引用其他变量值,解释特殊符号 的释义
单引号’‘:禁止引用其他变量值, $视为普通字符,不解释
反撇号 `:命令替换,可执行命令并提取输出后的结果,与 $( )作用相同
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.3从键盘输入内容为变量赋值

read 【-p “提示信息”】变量名
在这里插入图片描述

2.4 设置变量的作用范围

格式:
export 变量名
export 变量名=变量值

局部变量:
直接设置的变量是局部变量,只在当前shell 环境生效,如果重开终端,或者开启一个新的shell 环境,或者登陆其他用户账号,则变量失效
在这里插入图片描述
bash:切换一个新的bash环境

那么如何设置全局都有呢
在这里插入图片描述
注意,变量为单个字符会失效

在这里插入图片描述
同样这个单个字符也会失效

2.5 整数变量的运算

2.5.1 expr 进行运算

expr 变量1 运算符 变量2 【运算符 变量3……】
常用运算符:

  • 加法:+
  • 减法:-
  • 乘法:*
  • 除法:/
  • 求模(取余)运算:%

在这里插入图片描述
同时遵循数学法则先乘除后加减
在这里插入图片描述
$[ ]为数学中的括号功能

同时也可以用变量运算

在这里插入图片描述
echo $(( ))可以直接运算,带入变量同理

2.6环境变量

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

2.6.1设置环境变量

配置文件: /etc/profile , ~/bash_profile

/etc/profile : 针对全局的设置

~/bash_profile : 只对该用户生效

常见的环境变量:

环境变量释义
PATH指定命令的搜索路径(linux 根据PATH 的值搜索命令)
HOME当前用户的家目录
HISTSIZE历史命令最大条数
LOGNAME当前登录用户名
USER当前用户名
SHELL当前用户使用的shell环境
HOSTNAME当前主机名
PWD当前目录名

查看环境变量:

env  #显示当前所有的环境变量

2.7 只读变量

该变量只能使用,无法修改其变量值,放在内存的只读区域
适用于变量值不允许修改的情况
格式:

readonly 变量名

在这里插入图片描述

在这里插入图片描述
而且是删都删不掉的!!!

2.8位置变量

2.8.1位置变量有哪些

变量含义
$ 0当前脚本文件名
$ n第n个参数。用来传递给脚本或者函数
$ #传递给脚本或者函数的所有参数
$ *传递给脚本或函数的所有参数
$ @传递给脚本或者函数的所有参数
$ ?上个命令,函数,的返回值。0为真,非0位假
$ $当前shell 进程,脚本进程的PID

建一个脚本来执行,名字为test.sh
在这里插入图片描述

2.8.2 $*和 $@的区别

" $ * " 与 " $@" 都是表示传递给函数或者脚本的所有参数。

当 $* 和 $@ 没有 加 双引号 " " 时,都是将接受到每一个参数,看成独立的数据

当 $* 和 $@ 加 双引号 " " 时 , $* 将所有的参数看成一个数据, $@ 依然将每个参数看成独立的参数

在这里插入图片描述
第一段:
将变量 ∗ 的 值 赋 给 a 每 有 一 个 参 数 循 环 一 次 ( 只 有 一 次 循 环 ) 第 二 段 : 将 *的值赋给a 每有一个参数循环一次(只有一次循环) 第二段: 将 a:@的值赋给b
每有一个参数循环一次(有三次循环)
脚本内容输出后:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值