Shell参考 - Linux Shell 训练营

出品方<Linux.cn & 阿里云开发者学堂>
一,Linux 可以划分为以下四个部分:
1. 应用软件
2. 窗口管理软件 Unity Gnome KDE
3. GNU 系统工具链 Software- GNU Project - Free Software Foundation
4. Linux 内核
二,什么是shell
1. Linux shell 是一种特殊的交互式工具,它提供了文件管理,运行进程的途径。
2. Shell 的核心是命令提示符,允许用户输入命令,然后解释命令,并在内核中执行。
3. 用户可以编写脚本文件,将多个 shell 命令以某种形式组织起来,作为程序一起执行。
三,默认的 Shell —— GNU Bash Shell
1. Shell 有很多种,不同的 shell 有不同的特性
2. 几乎所有的 Linux 发行版默认 shell 是 Bash shell
3. 有些发行版的默认系统 shell 和 默认交互 shell 并不相同
4. 查看系统支持的 shell 类型
bash: 一种对 bsh 在功能上进行扩展的 shell,几乎可以涵盖 shell 所需要的所有功能
ksh: 一种与 bsh 兼容的编程 shell,增加了很多特性,常见于 Unix 操作系统
tcsh: 一种具有 C 语言风格语法结构的 shell,常见于嵌入式开发(IC 公司)
zsh: 一种结合了 bash、ksh 和 tcsh 的特点,同时提供了高级编程特性的高级 shell
sh: 在绝大部分 Linux 发行版中,作为软链接指向其他 shell(默认是 bash )
shell 脚本 = shell 命令 + shell 特性 + 流程控制
四,Shell 的常用命令
# 管理文件和目录
touch cp mv rm file cat more less tail head cd pwd ls mkdir rmdir
# 管理系统进程
ps top kill killall
# 管理磁盘空间
mount umount df du
# 处理数据文件
sort grep gzip tar
#Shell 命令帮助手册
man [command]
五,Shell脚本中的变量
# 环境变量
set env
# 变量的定义/赋值
val=vaule
# 使用美元符 $ 对变量进行引用
echo ${name}
# 命令替换:将命令的输出赋值给变量
YYYYMMDD=$(date +%Y%m%d)
六,Shell脚本的条件控制
# if-then 语句
# if-then-else 语句
# if-then-elif-else 语句
if command
then
    commands
fi
条件测试
  • test 命令提供了在 if-then 语句中测试不同条件的途径。
  • 如果 test 命令中列出的条件成立,返回的退出状态码为 0,反之为 1。
  • test 命令的等价写法 [ ]
if [ ] ; then 
    commands
fi
提供的三类判断条件
  • 数值比较
  • 字符串比较
  • 文件比较
case 语句,常代替 if-then-elif 语句用于对某个变量有大量判断语句的场景。
七,shell 脚本中数组的使用
  • 一维数组
    • 数组定义、元素引用、数组长度、数组分片
  • 二维数组
    • Shell 只有一维数组的概念
    • 如何实现二维数组的需求
  • 关联数组(Bash从4.0版本才支持)
    • 字典的概念
    • 关联数组的定义与元素的访问
    • 遍历元素的 key 和 value
八,Shell 脚本的循环控制
# for 语句
# 第一种
for var in list
do
    commands
done
# 读取列表中的值
# 从命令读取值
# 用通配符遍历目录
# 第二种
for (( 变量赋值; 迭代条件; 迭代过程 ))
do
    commands
done
# while 语句
# until 语句
# 嵌套循环
# break 
# continue
九,Shell 脚本的参数
# 命令行参数
bash xxx.sh arg1 arg2
# 位置参数
$0 $1 ... $9 ${10}
# 若参数内容包含空格,则必须使用引号
bash xxx.sh "arg1 arg2"
# 特殊参数
$# $* $@
# 移除参数
shift
直接调用左移一个参数,以数字作为参数则指定左移的参数个数。
参数的几种常见形式
例:有一个 shell 脚本,用于处理一个文件中特定日期的数据,并将结果输出到另一个文件中。
我们需要有三个参数:输入文件路径、待处理数据的日期、输出文件路径
# 1. 参数个数明确、顺序固定
./handle_data.sh para1 para2 para3
# 2. 通过命令行选项传参(空格分隔),支持缺省参数
./handle_data.sh -input para1 -date para2 -output para3
10,Shell 脚本中的函数
函数的定义与使用
# 创建函数
function func_name { ... }
func_name() { ... }
# 使用函数
func_name
  • 函数中使用变量
    • 向函数传递参数
  • 位置参数变量
  • 在函数中处理变量
    • 全局变量
    • 局部变量 local
函数的返回值
# 获取函数的退出状态码
# 默认为函数最后执行的命令的退出状态码
$?
# 使用 return 命令
范围:整数 0-255
# 使用命令执行获取函数的输出
ans=$(func)
11,Shell 循环控制与参数处理
作业
194. 转置文件 - 力扣(LeetCode)
扩展
# 仿照以下脚本进行练习
tzselect
12,Shell 脚本编码规范
  • 脚本的命名与权限
    • 文件后缀、文件名可读性、可执行权限
  • 脚本的基本结构
    • Shebang、函数、注释
  • 脚本中变量与函数的命名与引用
    • 变量和函数命名格式
    • 引用方式
  • 脚本中的相对路径和绝对路径
    • 获取脚本执行路径的方法
  • 脚本中的日志输出规范
    • 函数封装、日志格式
13,Shell 脚本调试与排错
常见问题
1. 特殊字符问题
2. 环境变量问题
调试与排查
1. bash –n
读取但不执行命令
2. bash -x
显示bash执行过程
14,函数库
# 系统公共函数库文件,我在Ubuntu上没找到
/etc/init.d/function
# 调用系统公共函数库中的函数
. /etc/init.d/functions 
source /etc/init.d/functions
# 第三方公共函数库
Bash Shell Function Library
Bash Shell Function Library 是一个短小精炼的Bash 公共库,他提供了诸如数组操作、命令执行、文件管理、日志记录、信息提醒、网络检测、字符操作、时间操作、变量操作等功能,帮助运维工程师快速完成自己的脚本编写工作。
项目地址: 
GitHub - SkypLabs/bsfl: Bash Shell Function Library
GitHub - SkypLabs/bsfl: Bash Shell Function Library​
bsfl: Bash Shell Function Library 是一个短小精炼的 Bash 公共库,他提供了诸如数组操 作、命令执行、文件管理、日志记录、信息提醒、网络检测、字符操作、时间操作、变量 操作等功能,帮助运维工程师快速完成自己的脚本编写工作。在线文档:https://skyplabs.github.io/bsfl/modules.html
Bash Lib
Bash Lib 是一个原子化的公共库,你可以根据自己的实际需要,引入所需的公共库分组,使用相应的内容,降低整个项目的大小。Bash Lib 提供了诸多原子库,包括参数处理、日历处理、日期处理、Hash处理、帮助处理、列表处理、交互处理、文字处理、测试处理、时间处理等功能。
项目地址: Bash-lib by aks 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/403366.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

达梦数据库的系统视图v$database

达梦数据库的系统视图v$database 达梦数据库&#xff08;DM Database&#xff09;提供了多个系统视图&#xff0c;以便管理员能够监控和管理数据库的运行状态和性能。V$DATABASE 是其中一个关键系统视图&#xff0c;它包含有关数据库全局状态和配置的综合信息。 V$DATABASE 系…

Linux 软件编程学习第十五天

1.TCP粘包问题&#xff1a; TCP发送数据是连续的&#xff0c;两次发送的数据可能粘连成一包被接收到 1.解决粘包问题方法&#xff1a; 1.接收指定长度&#xff1a;&#xff08;不稳定&#xff09; 发送5个字节 接收5个字节 2.睡眠&#x…

Java | Leetcode Java题解之第342题4的幂

题目: 题解&#xff1a; class Solution {public boolean isPowerOfFour(int n) {return n > 0 && (n & (n - 1)) 0 && n % 3 1;} }

【数据结构算法经典题目刨析(c语言)】使用数组实现循环队列(图文详解)

&#x1f493; 博客主页&#xff1a;C-SDN花园GGbond ⏩ 文章专栏&#xff1a;数据结构经典题目刨析(c语言) 目录 一.题目描述 二.解题思路 1.循环队列的结构定义 2.队列初始化 3.判空 4.判满 5.入队列 6.出队列 7.取队首元素 8.取队尾元素 三.完整代码实…

接入谷歌支付配置

1.谷歌云创建项目 网址&#xff1a;https://console.cloud.google.com/ 按照步骤创建即可 创建好后选择项目&#xff0c;转到项目设置 选择服务账户&#xff0c;选择创建新的服务账户 名称输入好后访问权限吗账号权限都可以不用填写&#xff0c;默认就好了 然后点击电子邮…

企业高性能web服务器

目录 一.Web 服务基础介绍 1.1 Web 服务介绍 1.2.1 Apache 经典的 Web 服务端 1.2.1.1 Apache prefork 模型 1.2.1.2 Apache worker 模型 1.2.1.3 Apache event模型 1.2.2 Nginx-高性能的 Web 服务端 1.2.3 影响用户体验的因素 1.2.4 服务端 I/O 流程 1.2.4.1 磁盘 I…

【详细】linux 打包QT程序

【详细】linux 打包QT程序 一. 安装linuxdeployqt1.1 下载linuxdeployqt源码并修改如下 二. 安装patchelf三. 打包appimage四. 打包成 Debian包4.1 control文件内容4.2 postinst文件内容4.3 postrm文件内容4.4 打包命令4.4 安装命令4.5 卸载命令 一. 安装linuxdeployqt 下载地…

Gin框架接入Prometheus,grafana辅助pprof检测内存泄露

prometheus与grafana的安装 grom接入Prometheus,grafana-CSDN博客 Prometheus 动态加载 我们想给Prometheus新增监听任务新增ginapp项目只需要在原来的配置文件下面新增ginapp相关metric 在docker compose文件下面新增 执行 docker-compose up -d curl -X POST http://lo…

复现dom破坏案例和靶场

文章目录 靶场网址第一个实验步骤和原理(代码为示例要根据自己的实验修改) 第二个实验步骤和原理(代码为示例要根据自己的实验修改) 靶场网址 注册后点击 第一个实验 此实验室包含一个 DOM 破坏漏洞。注释功能允许“安全”HTML。为了解决这个实验&#xff0c;请构造一个 HT…

依赖注入+中央事件总线:Vue 3组件通信新玩法

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Vue篇专栏内容:Vue-依赖注入-中央事件总线 目录 中央事件总线使用 依赖注入使用 总结 中央事件总线 依赖注入…

【TiDB】09-修改tidb客户端访问密码

目录 1、修改配置文件 2、停止tidb-server 3、以root方式启动脚本 4、修改密码 5、停止脚本重启服务 1、修改配置文件 进入tidb-server默认部署位置 #切换tidb账号 su tidb# 进入tidb-server部署路径 cd /tidb-deploy/tidb-4000# 修改配置 vim ./conf/tidb.toml添加内容…

Datawhale AI 夏令营 第四期 AIGC Task3

活动简介 活动链接&#xff1a;Datawhale AI 夏令营&#xff08;第四期&#xff09; 以及AIGC里面的本次任务说明&#xff1a;Task 3 进阶上分-实战优化 这次任务呢&#xff0c;主要是对知识的一个讲解&#xff0c;包括ComfyUI工具的使用啊&#xff0c;以及LoRA的原理啊&…

学习记录第三十天

管道&#xff1a; 无名管道&#xff1a;只能用于亲缘关系进程之间的通信&#xff1a; 有名管道&#xff1a;是一种特殊的文件&#xff0c;存在于内存中&#xff0c;在系统中有对应的名称&#xff0c;文件大小为0字节&#xff1b; 编程&#xff1a; Linux系统中&#xff0c;…

Deepin-获取屏幕缩放比例

Deepin-获取屏幕缩放比例 一、概述二、实现代码 一、概述 环境&#xff1a;UOS、Deepin 我的目的是为了获取屏幕的缩放比例值&#xff0c;就是获取如下的值 我们可以去读取当前的环境变量值&#xff0c;在Qt Creator中可以看到这个值 二、实现代码 相关的Qt接口如下&…

串口通信协议(hal库)

目录 串口通信协议 串行/并行 同步/异步 单工/半双工/全双工 DR寄存器 轮询方式 中断方式 主要中断事件&#xff1a; DMA方式 USART 模块的常用 HAL 库常用接口函数 串口通信协议 串口通信&#xff08;Serial Communication&#xff09;指的是数据通过一个串行的通道…

前端如何使用Nginx代理dist网页,代理websocket,代理后端

本文将指导您如何配置Nginx以代理前后端分离的项目&#xff0c;并特别说明了对WebSocket的代理设置。通过本教程&#xff0c;您将能够实现一次性配置&#xff0c;进而使项目能够在任意局域网服务器上部署&#xff0c;并可通过IP地址或域名访问服务。 笔者建议 先速览本文了解大…

Java、python、php版的企业单位考勤打卡管理系统的设计与实现(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

C语言-使用数组法,指针法实现将一个5X5的矩阵中最大的元素放在中心,四个角分别放四个最小的元素(顺序为从左到右,从上到下,从小到大存放),写一函数实现之。

1.题目要求&#xff1a; 将一个5X5的矩阵中最大的元素放在中心&#xff0c;四个角分别放四个最小的元素&#xff08;顺序为从左到右&#xff0c;从上到下&#xff0c;从小到大存放&#xff09;&#xff0c;写一函数实现之。 2.数组法实现 #define _CRT_SECURE_NO_WARNINGS 1…

【自动驾驶】控制算法(一)绪论与前期准备

写在前面&#xff1a; &#x1f31f; 欢迎光临 清流君 的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落。&#x1f4dd; 个人主页&#xff1a;清流君_CSDN博客&#xff0c;期待与您一同探索 移动机器人 领域的无限可能。 &#x1f50d; 本文系 清流君 原创之作&…

ROW_NUMBER(), RANK(), DENSE_RANK() SQL排序函数图文详解

ROW_NUMBER(), RANK(), DENSE_RANK() ROW_NUMBER(): 为结果集中的每一行分配唯一的连续编号。即使有重复的值&#xff0c;ROW_NUMBER() 也会为它们分配不同的序号。 SELECT column_name, ROW_NUMBER() OVER (ORDER BY column_name) AS row_num FROM table_name;2. RANK(): 对结…