Linux Shell 脚本基础

目录

Linux Shell 脚本基础

1. Shell 介绍

2. 简单编写 Shell 脚本和执行

2.1 脚本编写规范

2.2 示例:编写第一个 Shell 脚本

2.3 脚本执行方式

3. Shell 变量(格式,使用,类型)

3.1 变量定义格式

3.2 变量使用方式

3.3 变量类型

4. Shell 字符串(单引号,双引号,获取长度,提取,查找)

4.1 单引号与双引号的区别

4.2 获取字符串长度

4.3 提取子串

4.4 查找子串

5. Shell 参数传递

5.1 常用位置参数变量

5.2 示例:参数传递与使用

5.3 $*和$@的区别

6. Shell 运算符

6.1 算术运算符

6.3 逻辑运算符


Linux Shell 脚本基础

1. Shell 介绍

Shell 是 Linux 系统中连接用户与内核的 “命令解释器”,它接收用户输入的命令,将其翻译成内核可理解的指令,执行后再将结果反馈给用户。简单来说,用户通过终端与 Shell 交互,间接操控 Linux 内核完成文件管理、进程控制、系统配置等操作。

常见的 Linux Shell 类型包括:Bash(Bourne Again Shell,Linux 系统默认 Shell,兼容性强、功能丰富)、Sh(Bourne Shell,早期基础 Shell)、Zsh(功能更强大的交互型 Shell,支持更多插件)等。其中 Bash 因默认预装、支持脚本编程和批量命令执行,成为企业运维中编写 Shell 脚本的首选。

Shell 的核心价值在于 “脚本编程”—— 将一系列 Linux 命令按逻辑组织到文本文件中,形成 Shell 脚本,通过执行脚本可自动化完成重复操作(如批量备份文件、定时检查服务状态、批量部署软件),大幅提升运维效率,减少人工操作失误。

2. 简单编写 Shell 脚本和执行

Shell 脚本是包含一系列命令的文本文件,编写与执行需遵循固定流程,以下为基础操作步骤:

2.1 脚本编写规范

  1. 指定解释器:脚本第一行需通过 “#!”(称为 Shebang)指定 Shell 解释器,确保系统用正确的解释器执行脚本,默认 Bash 解释器写法为#!/bin/bash
  2. 添加注释:用 “#” 开头的行表示注释,用于说明脚本功能、作者、编写时间或关键步骤,提升脚本可读性。
  3. 编写命令:将需执行的 Linux 命令按业务逻辑依次写入,命令格式与终端手动输入一致。

2.2 示例:编写第一个 Shell 脚本

需求:创建脚本hello.sh,实现 “输出欢迎信息 + 显示当前日期 + 列出当前目录文件” 功能,步骤如下:

用文本编辑器(如 vim)创建脚本文件:vim hello.sh

写入以下内容:

#!/bin/bash

echo "欢迎使用shell脚本!

保存退出:按Esc键,输入:wq保存并退出 vim。

2.3 脚本执行方式

Shell 脚本执行需先确保文件有 “执行权限”,常见执行方式有两种:

赋予执行权限后直接执行

赋予权限:chmod +x hello.sh(+x 表示添加执行权限)。

执行脚本:若脚本在当前目录,可输入./hello.sh(“./” 表示当前目录,)。

通过 Shell 解释器直接调用(无需执行权限)

格式:bash 脚本路径(或对应解释器,如sh hello.sh)。

示例:bash hello.sh,此方式无需提前赋予执行权限,适合临时测试脚本。

3. Shell 变量(格式,使用,类型)

Shell 变量用于存储数据(如字符串、数字、路径等),方便脚本中重复调用和修改,提升脚本灵活性。

3.1 变量定义格式

Shell 变量定义需遵循 “无空格” 原则,格式为:变量名=变量值,其中:

变量名:由字母、数字、下划线组成,不能以数字开头(如namefile_1合法,1_file非法),建议使用大写字母,区分系统变量与自定义变量。

赋值符号 “=”:两侧不能有空格(如age=20合法,age = 20非法)。

变量值:若包含空格或特殊字符(如$),需用双引号或单引号包裹(如msg="Hello World")。

3.2 变量使用方式

使用变量时,需在变量名前加 “”符号,格式为`变量名${变量名}`(后者在变量名与其他字符拼接时使用,避免歧义)。

只读变量: readonly 变量名=初始值 只读变量在初始化后不能修改初始值,只读变量不能被删除

删除变量(只能删除普通变量): unset 变量名

3.3 变量类型

Shell 变量无需显式声明类型,根据赋值内容自动区分,主要分为 3 类:

局部变量:仅在当前 Shell 脚本或终端会话中生效,脚本执行结束或终端关闭后失效,如上述示例中的msg

环境变量:可在当前用户的所有 Shell 会话中生效,常用于传递系统配置(如PATH(命令搜索路径)、HOME(用户家目录)、USER(当前用户名)。

4. Shell 字符串(单引号,双引号,获取长度,提取,查找)

字符串是 Shell 脚本中最常用的数据类型,用于存储文本信息,支持单引号、双引号包裹,及长度获取、子串提取、内容查找等操作。

4.1 单引号与双引号的区别

单引号(''):强引用,包裹的内容原样输出,不解析变量、命令或特殊字符(如$\)。

示例:输入 NAME="Linux"

  然后输入echo '$NAME'   验证

双引号(""):弱引用,包裹的内容会解析变量和命令(用$(命令)`命令`表示命令),特殊字符需用\转义(如\$\")。

示例:输入 NAME="Linux"

  然后输入echo '$NAME'   验证

4.2 获取字符串长度

使用${#字符串变量名}格式,可快速获取字符串的字符个数(包括空格)。

示例:输入:msg="Hello Linux Shell"

然后输入echo "${#msg}"   验证

4.3 提取子串

从字符串中截取部分内容,格式为${字符串变量名:起始位置:截取长度},其中:

起始位置:从 0 开始计数(如字符串 “abcde”,0 表示 “a”,1 表示 “b”)。

截取长度:可选参数,不指定则从起始位置截取到字符串末尾。

示例:以刚才的msg来提取,输入 echo "${str:0:5}"

4.4 查找子串

使用expr index "$字符串变量名" "查找的子串"格式,可获取子串中第一个字符在原字符串中的位置(从 1 开始计数,未找到返回 0);

示例:比如查找msg里的Linux里的L的位置,输入 echo `expr index "$msg"  L `

5. Shell 参数传递

执行 Shell 脚本时,可向脚本传递参数(如./script.sh 参数1 参数2),脚本内部通过 “位置参数变量” 接收并使用这些参数,实现脚本的灵活调用。

5.1 常用位置参数变量

Shell 预设了一系列位置参数变量,用于接收外部传入的参数,核心变量如下:

$0:表示脚本本身的文件名(如执行./hello.sh$0的值为./hello.sh)。

$1:表示第一个参数,$2表示第二个参数,……,$9表示第九个参数;若参数超过 9 个,需用${10}${11}表示(必须加{})。

$#:表示传入参数的总个数,用于判断参数是否完整。

$*:将所有参数视为一个整体字符串(如传入参数a b c$*的值为"a b c")。

$@:将每个参数视为独立字符串(如传入参数a b c$@的值为"a" "b" "c")。

$?:表示上一条命令的执行结果(返回 0 表示执行成功,非 0 表示执行失败),常用于判断参数是否合法或命令是否执行成功。

$$ 脚本运行的当前进程 ID号
$!  后台运行的最后一个进程的 ID号

5.2 示例:参数传递与使用

创建脚本ce.sh,输入以下内容

#! /bin/bash
echo "传入参数的总个数" $#
echo "所有参数视为一个整体字符串 $*"
echo "脚本运行的但前进程号" $$
echo "后台运行的最后一个进程id号" $!
echo "将每个参数视为独立字符串 $@"
echo "判断命令是否正确" $?
echo $1
echo $2

wq保存,执行脚本输入  sh ce.sh 1 2    并判断结果

5.3 $*和$@的区别

不被" "包含时:$*和$@都以$1 $2… $n 的形式组成参数列表

被" "包含时:

*"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n" 的形式组成一个整串

"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式组成一个参数列表

6. Shell 运算符

Shell 支持算术运算(如加减乘除)、比较运算(如大于、小于)和逻辑运算(如与、或),但需通过特定工具或语法实现,不能直接使用 “+、-、*、/” 等符号进行运算。

6.1 算术运算符

常用算术运算符包括:+(加)、-(减)、*(乘)、/(除,整数除法,舍去小数)、%(取余)、=(赋值)、==(等于,判断)、!=(不等于,判断)。

执行算术运算的 3 种常用方式:

使用$((运算表达式)):最简洁的方式,支持所有算术运算符,示例:

分别输入 a=10,b=3,然后输入echo $[a+b] 和 echo $[a*b] 查看结果

使用expr 运算表达式:需注意 “*” 需转义为\*,且运算符两侧需加空格。例如: 2+2 是不能运算的,必须写成 2 + 2 ,完整的表达式要被`符号包含,注意不是单引号,在 Esc 键下边

输入expr $a + $b 和 expr $a \* $b  查看结果

6.2 比较运算符

比较运算符主要用于判断数值大小或字符串是否相等,需在[](或[[]])中使用,核心运算符如下:

数值比较:-eq(等于)、-ne(不等于)、-gt(大于)、-lt(小于)、-ge(大于等于)、-le(小于等于)。

6.3 逻辑运算符

逻辑运算符用于组合多个判断条件,核心运算符如下:

&&(逻辑与):两个条件同时成立,结果为真。

||(逻辑或):两个条件任意一个成立,结果为真。

示例:a=10 b=3输入以下内容

&&不成立则输出为0

||成立,输出为1

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值