Linux应用软件编程00-Shell脚本

发布时间:2026/8/21 7:10:04

Linux应用软件编程00-Shell脚本
一、linux操作系统介绍① Linux内核5大功能内存管理负责系统内存的分配与回收进程调度实现 CPU 时间片分配和进程调度文件系统遵循一切皆文件的设计理念进程通信管理进程间的数据交互网络通信实现网络协议栈功能② Linux内核Linux内核是由系统调用组成的一些纯C代码不允许与用户直接交互内核功能复杂不容易被调用所以通过shell编写一系列命令来完成内核功能shell命令解释器③ shell作用保护内核命令解释器④ 库函数库函数是对系统调用的封装能够处理一些复杂的应用场景系统调用是Linux内核中的函数接口只有在Linux系统中才能使用功能强大但十分简练库函数可以移植所以具有通用性二、Shell2.1 shell命令2.1.1 文件目录操作命令作用ls查看目录ls -l详细信息ls -a显示隐藏文件touch新建普通文件rm删除文件rm -rf强制删除目录mkdir创建文件夹rmdir删除空文件夹cp复制复制目录需要加-rfmv移动 / 重命名文件类型b block 块设备文件c character 字符设备文件d directory 目录文件-普通文件l link 链接文件s socket 套接字文件p pipe 管道文件2.1.2 文件查看命令cat filename直接显示整个文件内容适合处理小文件more/less支持分页浏览适合查看大文件内容两者功能类似。more的操作空格键向下翻一页Enter 键向下翻一行q退出查看/ 搜索词搜索内容more的搜索功能较弱less的操作空格键或Page Down向下翻一页Page Up向上翻一页j或↓向下移动一行k或↑向上移动一行/ 搜索词向下搜索? 搜索词向上搜索n跳转到下一个匹配项N跳转到上一个匹配项q退出查看在less中使用-N参数显示行号使用less时输入G可直接跳转到文件末尾输入gg跳转到文件开头可以一次打开多个文件通过:n切换到下一个文件:p切换到上一个文件head/tail查看文件首尾部分内容例如tail -n 20 filename查看文件末尾20行head -n 10 filename查看文件开头10行2.1.3 文件查找find . -name 文件名递归搜索当前目录及其子目录中匹配指定名称的文件grep 字符串 文件名在指定文件中查找包含特定字符串的行并输出2.1.4 通配符*匹配任意长度任意字符?匹配单个任意字符[]匹配括号内指定单个字符ls file_*.txt ls file_??.txt ls file_[1,3,5].txt ls file_[1-5].txt ls file_[^6].txt2.1.5 压缩解压 tar# 压缩 gz tar -zcvf filename.tar.gz dirname/* # 解压 gz tar -zxvf filename.tar.gz # 压缩 bz2 tar -jcvf filename.tar.bz2 dirname/* # 解压 bz2 tar -jxvf filename.tar.bz22.1.6 组合命令管道|把前一条命令输出当做后一条命令输入ps -ef | grep bash重定向覆盖重定向清空文件写入追加重定向在文件末尾追加ps -ef file.txt在/usr/include/stdio.h文件中的后200行 找到和extern 相关的内容 并把这些 内容所在的行记录到file.txt文件中 使用一条shell命令实现 tail -n 200 /usr/include/stdio.h | grep extern file.txt2.1.7 其余命令echo打印内容到终端history查看历史执行命令du查看文件 / 目录大小du -k/du -mod -c file.txt按字符格式查看文件原始内容 (od 按照指定的方式查看文件中的内容)date查看系统时间uname -a查看内核、平台架构信息ifconfig网卡信息ping测试网络连通2.1.8 dpkg工具集deb 包本地安装# 安装软件 sudo dpkg -i xxx.deb # 卸载软件 sudo dpkg -P 软件名 # 查看是否安装成功 dpkg -l 软件名2.1.9 apt-get工具集(必须连接网络)# 下载并安装软件 sudo apt-get install 软件名 # 卸载软件 sudo apt-get remove 软件名 --purge2.2 shell编程① 编译型语言和解释型语言特点编译型语言支持丰富的数据类型采用先编译后执行的运行机制执行效率高运行速度快开发周期相对较长擅长数据运算和处理解释型语言所有数据均以字符串形式处理采用边解释边执行的方式运行执行效率较低运行速度较慢开发效率较高适合系统开发和维护工作② 编写shell脚本并执行的步骤1.打开文件并编写代码 vim filename.sh 2.加上执行权限 chmod x filename.sh 3.运行脚本 ./filename.sh③ shell脚本本质就是一系列shell命令的集合。④ shell中的变量环境变量系统预定义变量例如PWD、PATH、HOME位置变量$0当前执行的脚本文件名$1$2$3依次表示传入脚本的第1、2、3个参数$#传入参数的总数量$$当前脚本运行的进程ID$?上一条命令的执行返回值自定义变量变量名值注意等号两侧不能有空格#!/bin/bash echo echo $PWD echo $HOME echo $PATH echo echo $0 echo $1 echo $2 echo $3 echo $# echo $$ echo $? echo ahello world b100 echo $a echo $b⑤ shell 引号区别双引号 会解析其中的变量将其替换为对应的值单引号 保持内容原样输出不会解析变量反引号 将其中的内容作为命令执行等同于$()语法⑥ expr - 计算表达式expr是一个用于计算表达式的命令行工具支持整数运算、字符串操作和逻辑比较浮点数计算需借助其他工具如bc。它通常用于 Shell 脚本中处理数学或字符串运算。运算符与操作数之间需用空格分隔。算术运算加、-减、*乘、/除、%取模乘法符号*需转义为\*避免被 Shell 解析为通配符比较运算等于、!不等于、大于、大于等于、小于、小于等于比较运算符需用反斜杠转义如\字符串操作:匹配子字符串返回匹配的字符数substr提取子字符串需结合expr语法expr hello : h.*o # 输出 5匹配整个字符串 expr substr abcdef 2 3 # 输出 bcd从第2字符开始取3个字符#!/bin/bash num100 echo num $num echo num $num echo num $num read n echo n $n sumexpr $num 1 echo sum $sum实现算术运算#!/bin/bash read num1 read num2 addexpr $num1 $num2 subexpr $num1 - $num2 mulexpr $num1 \* $num2 divexpr $num1 / $num2 echo add $add echo sub $sub echo mul $mul echo div $div⑦ shell脚本中的输入和输出echo 输出read 输入⑧ if分支语句# 语法 if 判断条件 then else fi#!/bin/bash read num1 read num2 if [ $num1 -gt $num2 ] then echo 大于 elif [ $num1 -lt $num2 ] then echo 小于 else echo 等于 fitest - 检查文件类型并比较值使用方法test 表达式、[ 表达式 ] 表达式两边必须有空格-b检查是否为块设备 -c检查是否为字符设备 -d检查是否为目录 -f检查是否为普通文件 -L检查是否为符号链接 -S检查是否为套接字文件 -p检查是否为管道文件 -e检查文件是否存在 -s检查文件是否存在且不为空 字符串比较 , !字符串相等/不等 -z字符串为空 -n字符串非空 数值比较 -eq, -ne等于/不等于 -gt, -lt大于/小于 -ge, -le大于等于/小于等于 可以通过逻辑运算符组合多个条件 -a与(AND) -o或(OR) !非(NOT) if [ -f $file -a -r $file ]; then echo 文件存在且可读 fi练习1从终端接收文件名(文件路径)打印出该文件的类型#!/bin/bash read filename if [ -L $filename ] then echo 链接文件 elif [ -b $filename ] then echo 块设备文件 elif [ -c $filename ] then echo 字符设备文件 elif [ -d $filename ] then echo 目录文件 elif [ -f $filename ] then echo 普通文件 elif [ -S $filename ] then echo 套接字文件 elif [ -p $filename ] then echo 管道文件 fi练习2从终端接收一个文件名 如果该文件名为qianrushi则处理该文件 如果文件名不为qianrushi则无需做任何处理 处理方式为 如果该文件已经存在 则创建一个tmp文件夹 并在文件夹下新建quanrushi.txt文件 如果文件不存在则直接创建。#!/bin/bash read filename if [ $filename qianrushi ] then if [ -e $filename ] then mkdir tmp cd tmp touch $filename.txt else touch $filename.txt fi fi⑨ case分支语句# 语法 case 变量名 in 值1)语句 ;; 值2)语句 ;; 值3)语句 ;; *)语句 ;; esac练习从终端输入一个成绩 使用case打印出成绩的级别 如果90 - 100 打印优秀、80 - 89 打印良好、70 - 79 打印中等、60 - 69 打印及格、60以下 打印不及格。#!/bin/bash read score shiexpr $score / 10 case $shi in 10)echo 优秀 ;; 9)echo 优秀 ;; 8)echo 良好 ;; 7)echo 中等 ;; 6)echo 及格 ;; *)echo 不及格 ;; esac⑩ while 循环# 语法 while 条件 do 语句 done#!/bin/bash i0 sum0 while [ $i -lt 101 ] do sumexpr $sum $i iexpr $i 1 done echo sum $sum⑪ for 循环# 语法 for i in 1 2 3 4 5 do 语句 done练习1打印1-100数字#!/bin/bash #for i in 1 2 3 4 5 #for i in seq 100 #for i in {1..100} for ((i 0; i 101; i)) do echo i $i done练习2求1-100的和#!/bin/bash for ((i 0; i 101; i)) do sumexpr $sum $i done echo sum $sum⑫ 数组#!/bin/bash array(hello world how are you) echo ${array[0]} echo ${array[1]} echo ${array[2]} echo ${array[3]} echo ${array[4]} echo ${array[*]}⑬ 函数#!/bin/bash #函数return返回的是函数调用的结果,结果为0 #函数内部的打印会作为函数的返回值 add() { ret0 retexpr $1 $2 echo $ret return 3 } read num1 read num2 sumadd $num1 $num2 echo $? echo sum $sum

相关新闻

单克隆抗体和多克隆抗体有什么区别?| 单抗与多抗区别 | 抗原表位与抗体特异性解析

单克隆抗体和多克隆抗体有什么区别?| 单抗与多抗区别 | 抗原表位与抗体特异性解析

2026/8/21 7:10:04

抗体是生命科学研究中常用的免疫学工具,根据抗体产生细胞的克隆来源,可分为单克隆抗体(Monoclonal Antibody,mAb)和多克隆抗体(Polyclonal Antibody,pAb)。两类抗体都能够与特定抗原…

2026年Java后端面试趋势与实战指南

2026年Java后端面试趋势与实战指南

2026/8/21 7:00:04

1. 2026年Java后端面试全景观察最近帮团队面试了三十多位Java后端候选人,发现一个有趣现象:80%的候选人还在用2023年的八股文套路应对2026年的技术考察。这让我意识到需要整理一份真正符合当前技术趋势的面试指南。2026年的Java后端面试已经呈现出三个明…

Java大厂面试核心考点与高段位应对策略

Java大厂面试核心考点与高段位应对策略

2026/8/21 7:00:04

1. 互联网大厂Java面试的戏剧性场景解析"严肃面试官VS搞笑程序员"这个标题生动勾勒出技术面试中的典型戏剧冲突。作为经历过上百场技术面试的老兵,我见过太多候选人在高压环境下表现失常的案例。某次阿里P7面试中,一位候选人在被问到HashMap扩…

邮件安全解决方案

邮件安全解决方案

2026/8/21 8:00:06

依托2大自有平台,以大数据、深度分析和机器学习,形成自主精准情报源 专注于模糊哈希(静态相似)和恶意软件行为聚类分析(动态相似),形成智能聚合与关联分析 自研机器学习算法,智能检测…

SpringBoot_4:注册登录人机验证与邮件发送

SpringBoot_4:注册登录人机验证与邮件发送

2026/8/21 8:00:06

目录 一、注册界面的人机验证 1、Hultool图形验证码校验 2、邮件发送 3、邮件校验 二、总结 我们在开发注册接口时,需要考虑两个因素: 1.注册方是否是机器,恶意注册会浪费服务器资源 2.注册方提供的凭证是否可用,如果不加校…

2026大厂AI招聘趋势:大模型与基础设施岗解析

2026大厂AI招聘趋势:大模型与基础设施岗解析

2026/8/21 8:00:06

1. 项目概述:2026互联网大厂AI岗位招聘趋势解读最近百度发布的2026届校招数据在技术圈引发热议——4000个校招offer中AI相关岗位占比超过90%,这个数字背后反映的是整个行业的技术转型趋势。作为从业十余年的技术老兵,我完整经历了从移动互联网…

Claude Code(CLI) 的保姆级教程

Claude Code(CLI) 的保姆级教程

2026/8/21 8:00:06

文章目录Nvm及其Node配置使用Node 22全局安装 Claude打开终端程序执行如下命令验证,执行如下命令输出 claude code 的版本号注册 DeepSeek APIKEY注册DeepSeek的开放平台账户创建 APIKEY,如下图为 APIKEY 设置一个名字(随意)点击创…

库存建模实战:从业务问题到数学结构的四步拆解法

库存建模实战:从业务问题到数学结构的四步拆解法

2026/8/21 8:00:06

1. 这不是“套公式”,而是用数学重建真实世界的库存逻辑 很多人看到“存贮模型”四个字,第一反应是翻《运筹学》教材里那个经典的EOQ(经济订货批量)公式:$$ Q^* \sqrt{\frac{2DS}{H}} $$。抄一遍参数,代入…

HubPort vs Node-RED:同样是可视化编排,有什么不同

HubPort vs Node-RED:同样是可视化编排,有什么不同

2026/8/21 7:50:06

HubPort vs Node-RED:同样是可视化编排,有什么不同 Node-RED 是很多集成商熟悉的工具:拖拽节点、连线配置,把数据流编排起来。HubPort 也做设备对接,两者有什么不同? Node-RED 是流程编排工具。 它把数据流…

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

2026/8/19 3:36:59

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

2026/8/20 21:07:35

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

2026/8/19 8:02:16

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

091、主从同步控制策略

091、主从同步控制策略

2026/8/21 0:09:47

091、主从同步控制策略:从一次多轴抖动事故说起 去年调试一台四轴龙门平台,Z轴和两个X轴做主从同步。电机选的是台达A2系列,驱动器工作在位置模式,主站发脉冲指令,从站硬线跟随。调试时发现一个诡异现象:当主站以500rpm匀速运行时,从站电流波形每隔几秒会出现一次毛刺,…

向量检索实验失败后该查什么

向量检索实验失败后该查什么

2026/8/21 0:09:47

向量检索实验失败后该查什么 这篇要解决什么 向量检索实验失败后该查什么讨论的是一个可复查的工程问题。向量检索实验失败后该查什么不拿未经记录的事故、跑分或成本当作论据;判断需要回到当前项目的输入、版本和运行条件。 从边界开始 处理向量检索实验失败后该查…

提示词发布过程中的止损边界

提示词发布过程中的止损边界

2026/8/21 0:09:47

提示词发布过程中的止损边界 这篇要解决什么 提示词发布过程中的止损边界讨论的是一个可复查的工程问题。提示词发布过程中的止损边界不拿未经记录的事故、跑分或成本当作论据;判断需要回到当前项目的输入、版本和运行条件。 从边界开始 处理提示词发布过程中的止损…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/17 12:00:53

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/15 10:10:27

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/18 12:20:24

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…