当前位置: 首页 > news >正文

Linux——9

9. Shell 脚本

9.1. 编写shell脚本(重要)

9.1.1. 注意
  1. 等号两端不能有空格
  2. [ command ] 中括号两端一定要有空格
9.1.2. 分支结构(if)
9.1.2.1. if 语句
  • 语法
if expression
then[elif expressionthenthen-command-list]...[elseelse-command-list]
fi
  • 目的:实现双向或多路分支。
  • 示例
if [ expression ]
thencommands
elif [ expression ]
thencommands
elsecommands
fi
9.1.2.2. 简化的 if 语句
  • 语法
if expression
thenthen-commands
fi
  • 目的:实现双向分支。
  • 示例
if [ expression ]; thencommands
fi
9.1.3. 循环结构
9.1.3.1. for 语句
for variable [in argument-list]
docommand-list
done
9.1.3.2. while 语句
while expression
docommand-list
done
9.1.4. 键盘输入

read 命令来获取用户的键盘输入。

示例(Shell 脚本)

#!/bin/bashecho "请输入你的名字:"
read name
echo "你好,$name!"

在这个脚本中,read 命令用于从键盘读取用户输入的名字,并将其存储在变量 name 中。

9.1.5. 命令行参数

命令行参数是在执行脚本时直接在命令行中传递给脚本的值。这些参数可以通过特殊变量 $1, $2, $3, ... 等来访问,其中 $1 是第一个参数,$2 是第二个参数,依此类推。

  • $0:代表脚本本身的名称。当你运行一个脚本时,$0 就是该脚本的文件名。
  • $1:代表传递给脚本的第一个参数。
  • $2:代表传递给脚本的第二个参数。

示例(Shell 脚本)

        #!/bin/bash# 脚本名为 script.shif [ $# -eq 0 ]; then  # 检查是否有参数传入echo "请提供名字作为参数,例如: ./script.sh 你的名字"exit 1finame=$1  # 第一个参数存入 name 变量echo "你好, $name!"

在这个脚本中,$1 表示第一个命令行参数。脚本检查是否提供了参数($# 是参数的数量),如果没有提供参数,则打印用法信息并退出。

9.2. 命令操作符

9.2.1. 文件测试(File Testing)

表达式

返回值

描述

-d file

真/假

如果文件是目录,则为真。

-f file

真/假

如果文件是普通文件,则为真。

-r file

真/假

如果文件可读,则为真。

-a file

真/假

如果文件长度非零,则为真。

-t [filedes]

真/假

如果文件描述符与终端关联,则为真。

-w file

真/假

如果文件可写,则为真。

-x file

真/假

如果文件可执行,则为真。

9.2.2. 整数测试(Integer Testing)

表达式

返回值

描述

int1 -eq int2

真/假

如果 int1int2 相等,则为真。

int1 -ge int2

真/假

如果 int1 大于或等于 int2,则为真。

int1 -gt int2

真/假

如果 int1 大于 int2,则为真。

int1 -le int2

真/假

如果 int1 小于或等于 int2,则为真。

int1 -lt int2

真/假

如果 int1 小于 int2,则为真。

int1 -ne int2

真/假

如果 int1 不等于 int2,则为真。

9.2.3. 字符串测试(String Testing)

表达式

返回值

描述

str

真/假

如果 str 不是空字符串,则为真。

str1 = str2

真/假

如果 str1str2 相同,则为真。

str1 != str2

真/假

如果 str1str2 不同,则为真。

-n str

真/假

如果 str 的长度大于零,则为真。

-z str

真/假

如果 str 的长度为零,则为真。

9.2.4. 形成复杂表达式的操作符(Operators for Forming Complex Expressions)

操作符

描述

!

逻辑非操作符:如果后续表达式为假,则为真。

-a

逻辑与操作符:如果前一个(左)和后一个(右)表达式都为真,则为真。

-o

逻辑或操作符:如果前一个(左)或后一个(右)表达式为真,则为真。

()

括号用于分组表达式,每个括号前后至少有一个空格。

9.3. 运行 Bourne Shell 脚本的方法

  1. 使脚本文件可执行
    • 通过添加执行权限使脚本文件可执行。
    • 使用命令:chmod u+x script_file
  1. 直接运行脚本文件
    • 使用 /bin/sh/bin/bash 命令运行脚本文件作为其参数。
    • 使用命令:/bin/bash script_file
  1. 使用 source 或 . 命令
    • 使用 source. 命令运行脚本文件作为参数。
    • 使用命令:/bin/source script_file
  1. 强制当前 shell 执行脚本
    • 强制当前 shell 执行脚本,无论当前 shell 是什么。
    • 使用命令:#!/bin/bash(在脚本的第一行,称为 shebang)

9.4. Shell 特殊变量($)

#!/bin/bash
echo "===== Shell 特殊变量演示 ====="
echo "脚本名: $0"
echo "参数个数: $#"
echo "所有参数(\$*): $*"
echo "所有参数(\$@): $@"
echo "第一个参数: $1"
echo "第二个参数: $2"
echo "当前脚本进程ID(\$\$): $$"

环境变量

用途

$0

程序的名称

$1$9

命令行参数的值,从1到9

$*

所有命令行参数的值

$@

所有命令行参数的值;如果参数被引号包围,则每个参数单独引用

$#

命令行参数的总数

$$

当前进程的进程ID(PID)

$?

最近一个命令的退出状态

$!

最近一个后台进程的PID

9.5. 命令替换

定义

  • 当一个命令被包含在反引号(`)中或 $() 中时,shell 会执行该命令,并将其输出替换到命令的位置(包括反引号或 $())。

语法

  • 使用反引号:`command`
  • 使用 $():$(command)

目的

  • 将命令的输出替换为该命令。
9.5.1. 示例

假设你想要获取当前目录下的文件列表,并将其作为 ls 命令的参数:

  1. 使用反引号
echo \`ls\`

这将输出当前目录下的文件列表。

  1. 使用 $()
echo $(ls)

这也将输出当前目录下的文件列表。

9.5.2. 注意事项
  • 命令替换通常用于脚本中,以便动态获取命令的输出并将其作为参数传递给其他命令。
  • 使用 $() 时,可以嵌套命令,例如:$($(command1))
  • 使用反引号时,需要注意转义字符,例如:`echo "Hello, World!"`。

9.6. 数值数据处理

  1. 变量值存储
    • Bourne Shell 变量的值被存储为字符字符串。
  1. 执行算术和逻辑操作
    • 为了在变量上执行算术和逻辑操作,需要将它们转换为整数。
    • 确保操作结果转换回字符字符串,以便在 shell 变量中正确存储。

示例

a=10
b=20
sum=$((a + b))  # 计算和,并将结果存储在变量 sum 中

在这个例子中,$((a + b)) 会执行算术运算,并将结果转换为整数。然后,这个整数结果被存储在变量 sum 中。

9.6.1. expr 命令
  • 语法expr args
  • 目的:计算表达式参数 args 并将结果发送到标准输出。
9.6.2. 常用操作符/特性
  1. 逻辑运算符
    • \|:如果第一个表达式不为 null 或 0,则返回第一个表达式;否则返回第二个表达式。
    • \&:如果两个表达式都不为 null 或 0,则返回第一个表达式;否则返回 0。
  1. 整数比较运算符
    • =\>\>=\<\<=!=:用于比较两个整数是否相等、大于、大于等于、小于、小于等于、不等于。
  1. 整数算术运算符
    • +-\*/%:用于整数加法、减法、乘法、除法(返回商)、求余。
result=$(2 + 3)
echo $result

这将输出 5

9.6.3. 浮点数表达式
  • bc:一个任意精度的计算器语言。
  • 使用 echo expression | bc 来计算浮点数表达式。

示例

echo "2.5 + 3.7" | bc

这将输出 6.2

9.6.4. 注意事项
  • 在进行算术运算时,确保使用 $(( ))expr 命令来正确执行运算。
  • 逻辑运算通常需要使用外部命令如 test[ ]
  • 转换回字符串时,可以使用 $ 符号或 echo 命令。
http://www.dtcms.com/a/582239.html

相关文章:

  • 广西网站建设证件查询安装wordpress到服务器
  • 电子电气架构 --- 高阶智能辅助驾驶浅析
  • GPT-4o与GPT-5存在七项零点击攻击漏洞
  • 医院信息化建设会议安排网站县级网站
  • 网站建设方案文库wordpress的标签页
  • 17zwd一起做网站官网wordpress开发视频网站模板
  • 仓颉语言:全栈开发新利器,从服务端到鸿蒙的深度解析与实践
  • GitPuk零基础学习,使用GitPuk + Arbess进行CICD自动化部署
  • 部署基于 LNMP 的 Discuz! 论坛服务器
  • Cordova 开发鸿蒙应用完全指南
  • HarmonyOS开发-系统AI视觉能力-图片识别
  • YAML语言
  • ChatBox AI 中配置阿里云百炼模型实现聊天对话
  • 基于 GitCode 云端环境的 CANN ops-math 算子库深度测评:Ascend NPU 上的数学引擎解析
  • php网站本地搭建做采集网站赚钱
  • 03 Model组件及其使用技巧
  • 指针深入第四弹--sizeof和strlen的对比、数组和指针笔试题解析、指针运算笔试题解析
  • 做刷单的网站网站关键词优化遇到的情况和解决方法
  • 【Java】Java 打印字符数组的正确姿势
  • 做两个阿里网站wordpress教程下载
  • Rust 练习册 :Minesweeper与二维数组处理
  • Flink CDC「Data Pipeline」定义与参数速查
  • 电子烟花:科技点亮夜空的艺术
  • Anatomy-guided Pathology Segmentation
  • 广州建设工程合同备案系统网站做一个网站需要多少费用
  • 内存区域划分——垃圾回收
  • 网站建设可行性分析网站开发需求分析用的图
  • Android 无侵入式数据采集:从手动埋点到字节码插桩的演进之路
  • 一致性哈希和普通哈希有什么区别
  • vue 三种类型的插槽