LinuxC高级day03(Shell脚本)

news2024/11/15 8:48:59

【1】Shell脚本

1》Shell脚本基础概念

1> 概念

Shell使用方式:手动在命令行下命令或用Shell脚本 

Shell脚本本质:Shell命令的有序集合    扩展名最好以 .sh 结尾,见名知义  也可以没有

Shell既是应用程序,又是一种脚本语言

解释型语句:不需要编译,解释一句执行一句 Python、Shell脚本

编译型语句:需要编译器gcc、g++进行编译,比如C语言

2> Shell脚本的创建和执行 

新建一个Shell脚本文件: touch  xx.sh

在脚本文件里面第一行必须是  #!/bin/bash     意思是用/bin/bash来进行解释执行

执行方式:

1)先更改Shell脚本的执行权限 使其具有执行权限  chmod  权限  xx.sh

2)执行 :./xx.sh

2》变量 

1> 用户自定义变量

变量一般用大写

赋值操作用 =  ,但是 = 左右两边不能有空格 

引用变量时要在变量前加 $ 

2> 位置变量 

 $0或 ${0}表示命令行的第一个参数,也就是脚本名的参数  ./xx.sh

 $1、 $2....就是剩下的第二个、第三个命令行参数,以此类推

 $# 表示所有命令行参数的个数(除了第一个命令行参数)

 $@ 或 $* 表示所有命令行参数(除了第一个命令行参数)

 3> 预定义变量

$? 表示前一条命令的退出状态   0为真   非0为假 

$$  表示正在执行的进程的进程号 

4> 环境变量 

环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,如临时文件夹位置、系统文件夹位置

例:

HOME:/etc/password 文件中列出的用户主目录

PATH:Shell搜索路径,就是一系列目录,当执行命令时,Linux就在这些目录下查找

 3》功能语句

1> 说明性语句

以#开头是注释语句,起解释说明的作用

2> 功能性语句 
read

功能:从标准输入读入一行数据,并赋值给后面的变量

格式:read  变量1  变量2  变量3

           把读入行中的第一个数据赋值给变量1,第二个数据赋值给变量2 以此类推,当只剩最后一个变量但还有很多数据时,会把剩余数据都赋值给最后一个变量

read -p "提示语句" 变量列表 :可以将提示语句输出,同时输入变量

        

expr

格式: expr  表达式

注意:表达式符号之间必须用空格,元素要用$ 引用 可以直接输出结果,不过脚本里一般结合命令置换符把结果重新赋值给其他变量

算术运算符命令expr主要用于进行简单的整数运算,包括加(+)、减(-)、乘(\*)、整除(/)和取余数(%)等操作, 小括号前面也要加\。

test 

可测试对象:字符串 整数 文件属性 每种测试对象都有若干测试操作符

字符串测试:

test s1 = s2           测试两个字符串的内容是否完全一样

test s1 != s2          测试两个字符串的内容是否有差异

test -z s1               测试 s1 字符串的长度是否为0

test -n s1               测试 s1 字符串的长度是否不为0

整数的测试:

test a -eq b          测试 a 与 b 是否相等 equal

test a -ne b          测试 a 与 b 是否不相等 not equal

test a -gt b           测试 a 是否大于 b greater than

test a -ge b          测试 a 是否大于等于 b greater equal

test a -lt b            测试a 是否小于b litter than

test a -le b           测试a 是否小于等于b litter equal

文件属性的测试:

test -d name 测试name 是否为一个目录

test -f name 测试name 是否为普通文件

test -e name 测试文件是否存在

3> 结构性语句 
if语句

基本结构:

if 条件
  then
     命令表1
  else
     命令表2
fi

多路分支结构:

if 条件1 
   then 
     命令表1 
   elif 条件2 
     then 
       命令表2 
fi

嵌套结构:

 if 条件1 
   then 
     if 条件2 
    then 
       命令表1 
     fi 
else 
   命令表2 
fi

结合test判断

结合操作符[],但是[]前后都需要空格

 case语句

格式:

case 变量 in 
模式1) 
   命令表1 
   ;; 
模式2) 
   命令表2 
   ;; 
*)
   命令表n 
   ;; 
esac

for循环语句

格式:

for 变量名 in 单词表 
do 
    命令表 
done

for语句的几种书写格式:

1)for i in 1 2 3 4 do....done :     变量i从单词表中取值

2)for i do...done:   变量i从命令行取值,可以省略in单词表

3)for i in {1..10} do...done:      变量i从1-10个数中取值

4)for ((i = 0; i < 10; i++)) do...done:       书写格式类似c语言

 while循环语句

格式:

​​​​​​​ while 命令或表达式 
do 
    命令表
done

循环控制语句 

break n :结束 第 n 层循环 (从内层循环开始算第 1 层循环)

continue n :结束第 n 层的本次循环,继续下一次循环

 补充操作符

-o 或运算 例如 [ $a -lt 20 -o $b -gt 100 ] 返回 true

-a 与运算 例如 [ $a -lt 20 -a $b -gt 100 ] 返回 false

! 非运算 例如 [ ! false ] 返回 true

&& 逻辑与 例如 [[ $a -lt 100 && $b -gt 100 ]] 返回 false

|| 逻辑或 例如 [[ $a -lt 100 || $b -gt 100 ]] 返回 true

| 位或 例如 echo $[2|2] &位与 例如 echo $[2&1]

4》数组 

数组的赋值
1. arr = (1 2 3 4 5)

2. arr = ($1 $2 $3....)

3. read a b c 
   arr = ($a $b $c)

4. read -a arr
 数组的调用
${arr[i]}        #引用数组元素,数组元素下标从 0 开始到 n-1 结束
arr[i] = 10      #对数组元素重新赋值
${arr[@]}        #遍历数组
${#arr[@]}       #数组元素个数

 5》函数

函数定义方式
函数名() 
{ 
命令表 
} 

function 函数名()
{ 
命令表
}
 函数调用
函数名  参数列表

函数内 $1 $2 表示的时传递给函数的参数

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

迁移学习之基本概念

迁移学习 1、通俗定义 迁移学习是一种学习的思想和模式 迁移学习作为机器学习的一个重要分支&#xff0c;侧重于将已经学习过的知识迁移应用于新的问题中 迁移学习的核心问题是&#xff0c;找到新问题和原问题之间的相似性&#xff0c;才可以顺利地实现知识地迁移 定义&…

运行pytorch报异常处理

一、问题现象及初步定位&#xff1a; 找不到指定的模块。 Error loading "D:\software\python3\Lib\site-packages\torch\lib\fbgemm.dll 此处缺少.dll文件&#xff0c;首先下载文件依赖分析工具 Dependencies https://github.com/lucasg/Dependencies/tree/v1.11.1 之后下…

leetcode169. 多数元素,摩尔投票法附证明

leetcode169. 多数元素 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1&#xff1a; 输入&#xff1a;nums [3,2,3] 输…

C# winform 三层架构 增删改查 修改数据(修改篇)

ss一.留言 本专栏三层架构已经更新了 添加 登录 显示&#xff0c;还差修改以及删除&#xff0c;本篇更新修改&#xff0c;主要操作为点击修改某一条数据&#xff0c;然后跳转页面进行修改。 二.展示 我们先看DAL代码 /// <summary>/// 修改/// </summary>/// &l…

【RTOS面试题】什么是抢占?抢占的原理、抢占的好处、抢占有什么局限性?

&#x1f48c; 所属专栏&#xff1a;【RTOS-操作系统-面试题】 &#x1f600; 作  者&#xff1a; 于晓超 &#x1f680; 个人简介&#xff1a;嵌入式工程师&#xff0c;专注嵌入式领域基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大家&#xf…

大语言模型的模型量化(INT8/INT4)技术

目录 一、LLM.in8 的量化方案 1.1 模型量化的动机和原理1.2 LLM.int8 量化的精度和性能1.3 LLM.int8 量化的实践 二、SmoothQuant 量化方案 2.1 SmoothQuant 的基本原理2.2 SmoothQuant 的实践 三、GPTQ 量化训练方案 3.1 GPTQ 的基本原理3.2 GPTQ 的实践 参考资料 一、LLM.i…

让对话AI帮助你做程序架构设计,以及解决你的疑问

我想问下对话AI,本文采取的是chatgpt免费版 我问&#xff1a; 你说程序的设计&#xff0c;前后端分离的BS架构。比如工人基础档案1000条记录&#xff0c;工程项目基础档案10条记录&#xff0c;其他相关这两个基础档案的具体功能&#xff0c;比如打卡记录&#xff0c;宿舍记录&…

SD-WAN解决方案功能概述

SD-WAN&#xff08;软件定义广域网&#xff09;是一种前沿的网络技术&#xff0c;旨在为企业提供灵活、智能且高效的广域网连接。SD-WAN的主要功能可以分为四大类&#xff1a;路由、安全性、性能优化和管理控制。 路由功能 路由功能是SD-WAN解决方案的核心部分之一。传统的广域…

B站宋红康JAVA基础视频教程个人笔记chapter05

1.一维数组的定义方式 // 方式一(静态初始化) double[] prices; prices new double[]{20, 32, 43};// 方式二:&#xff08;动态初始化&#xff09; String[] foods; foods new String[4]; // 内部声明数组的长度 // String foods new String[4];// 其他方式 int[] prices …

【字符串哈希】

题目 代码 #include<bits/stdc.h> typedef unsigned long long ULL; const int N 1e510; const int P 131; char str[N]; ULL h[N], p[N]; ULL get_hash(int l, int r) {return h[r] - h[l-1] * p[r-l1]; } int n, m; int main() { scanf("%d%d", &n,…

Scrapy | 手动请求发送实现的数据爬取-段子王网站

文章目录 概要爬取流程代码技术细节format%回调函数 小结 概要 爬取段子王网站的标题和内容 核心 Scrapy的手动请求发送实现的数据爬取yield scrapy.Request(url,callback):GET-caL1back指宽解析函数&#xff0c;用于解析数据yield scrapy.ForRequest(url,callback,formdata):…

科普课堂走起 | 什么是网络安全和数据安全?

网络安全和数据安全是现代数字世界中非常重要的两个概念。让我们来详细了解一下这两个领域。 1.网络安全&#xff08;Network Security&#xff09; 网络安全是指保护网络系统免受未经授权的访问、攻击、破坏或滥用的一系列技术和过程。它旨在确保信息的机密性、完整性和可用…

jmeter-beanshell学习16-自定义函数

之前写了一个从文件获取指定数据&#xff0c;用的时候发现不太好用&#xff0c;写了一大段&#xff0c;只能取出一个数&#xff0c;再想取另一个数&#xff0c;再粘一大段。太不好看了&#xff0c;就想到了函数。查了一下确实可以写。 public int test(a,b){return ab; } ctes…

磁盘无法访问的危机与解救:数之寻软件的数据恢复之旅

在数字时代&#xff0c;磁盘作为数据存储的核心&#xff0c;承载着我们的工作文档、珍贵照片、个人视频等无价之宝。然而&#xff0c;当您试图访问某个磁盘时&#xff0c;却遭遇了“磁盘无法访问”的提示&#xff0c;这无疑是一场突如其来的数据危机。本文将深入探讨磁盘无法访…

浮毛季到了,拒绝猫咪变成“蒲公英”,宠物空气净化器去除浮毛

同为铲屎官&#xff0c;面对家中无处不在的猫毛挑战&#xff0c;想必你也深感头疼。衣物、沙发乃至地毯上的明显猫毛尚可通过吸尘器或粘毛器轻松应对&#xff0c;但那些细微漂浮的毛发却成了难以捉摸的“小恶魔”&#xff0c;普通的空气净化器往往力不从心。对于浮毛&#xff0…

平安城市行业无人机解决方案(网格化巡逻场景应用)

场景痛点&#xff1a; 缺少飞手&#xff0c;导致无人机应用频次偏低 无人机需要人工换电池、维护及存储 日常巡逻 | 无人机补盲巡逻 大疆航点飞行功能&#xff0c;重复性任务只飞一遍&#xff0c;后续重复调用 无人机航点规划&#xff0c;一次设置&#xff0c;后续重复调用…

Linux知识复习第3期

目录 网络管理 &#xff08;1&#xff09;查看IP信息&#xff1a; &#xff08;2&#xff09;配置临时生效的网络连接 &#xff08;3&#xff09;修改配置文件配置网络连接&#xff08;network服务&#xff09; &#xff08;4&#xff09;shell脚本批量IP设置 网络…

HarmonyOS Flex布局

前置知识&#xff1a; 一次开发&#xff0c;多端部署:一套代码工程&#xff0c;一次开发上架&#xff0c;多端按需部署。支撑开发者快速高效的开发支持多种终端设备形态的应用&#xff0c;实现对不同设备兼容的同时&#xff0c;提供跨设备的流转、迁移和协同的分布式体验自适应…

Protobuf:原理、用法与 C++ 实践

在当今的软件开发领域&#xff0c;高效的数据序列化和通信协议是构建高性能、可扩展系统的关键。Protobuf&#xff08;Protocol Buffers&#xff09;作为一种流行的开源序列化框架&#xff0c;正因其出色的性能、简洁的语法和跨语言支持而备受青睐。本文将深入探讨 Protobuf 的…

织梦cms站长导航网站源码

介绍&#xff1a; 源码仅供技术参考严禁商业用途&#xff01;版权归原作者所有&#xff01; 源码上传 到服务器 导航源码安装&#xff1a;域名/install/ 后台信息 后台地址&#xff1a;域名/dede 后台账号&#xff1a;admin 后台密码&#xff1a;7206876 代码下载&#x…