Linux:shell脚本笔记

news2024/9/21 10:29:26

介绍

shell是直接基于操作系统的一门脚本语言,是用C语言编写的一个工具。
shell在工作中的作用:
1.批量的运行Linux命令
2.可以去运行大数据平台的工具以及数据库的脚本,实现脚本的动态传参

编写shell脚本

步骤一

使用vim + 文件名来新建一个shell脚本文件(…sh)

步骤二

在新文件的第一行要加上文件运行的命令来源:
#!/bin/sh

#!/bin/bash

步骤三

运行脚本 有三种基本方法

方法说明
sh 文件名
bash 文件名
文件路径前提是需要给文件赋予x的执行权限

语法基础操作

变量定义

1.shell脚本默认所有变量都是字符串,定义方法同python,变量值里有空格必须加引号,否则不用加
2.在定义变量的时候,不能随便添加空格,整个shell脚本对于空格的使用都是非常严格的
3.在读取变量的时候,要使用${变量名} 或者$变量名 来对变量进行读取和引用。

输出语句

echo 要输出的内容
可选参数:-e:字符串里面的 \ 会被识别为转义字符
\n 换行符 \t 制表符 \c 连接符

输入语句

read -p “提示语句” 变量名字

给句子添加注释

在shell中如果多行注释,那么可能会因为一些符号导致注释出错或者失效,所以在shell中我们通常都是使用单行注释
在行首添加 # 即可

数据类型和基本操作方法

字符串

单引号和双引号的区别:单引号无法识别与解析字符串中的变量

基本操作方法

方法说明
${#变量名}返回字符串长度
${变量名:start:len}截取字符串
${变量名/old/new}只替换匹配的第一个数据
${变量名//old/new}替换所有数据

数字

整数运算

格式说明
$[ ]echo $[$n1-$n2]:变量前需要加$用于识别
$()echo $(($n1+$n2))
expr属于Linux的命令,嵌套时注意加上反引号,例:echo expr $n1 + $n2
let使用let语句实现数字计算,例:let c=n1+n2 echo $c;let语句不能直接用echo输出;特别的乘法符号前要加上转义符

小数运算

加法和减法
“变量+变量”|bc
乘法和除法
需要定义精度
“scale=小数精度;变量;+变量”|bc 这是个通用格式

数组

数组是很多不同的数据的一个集合体,中间使用空格来隔开数据
例: t=(100,22,3.4,hello) 默认都是字符串
数组的读取

${数组名}只会读取数组的第一个元素
${数组名[*]}读取数组的所有数据

注:数字的长度查询和元素内容的截取,和字符串的语法相同。
–在数组中查询指定序号的数据
${数组名[序号]}
–替换数据
数组名[seq]=value
–新增数据
数组名[数组长度]=value

逻辑部分

判断分支

if [ 条件判断 ]
  then;
    执行语句
  elif [条件判断]
  then;
    执行语句
  else
    执行语句
fi
第二种形式
f test 条件判断
  then
    执行语句
  elif test 条件判断
  then
        执行语句
  else
     执行语句
fi
数字的判断

逻辑符号
大于-gt
小于-lt
大于等于-ge
小于等于-le
等于-eq
不等于-ne

字符串的判断

逻辑符号
等于==
不等于!=
并且-a
或者-o

循环控制

for循环

使用{}表示循环的范围,这种方法定义简单,但是不能用变量来进行括号内数据的替换。

for i in {1..10}				#开始..结束
do
  echo 变量是:$i
done

for i in {1..10..2}			#开始..结束..步长
do
  echo 变量是:$i
done

for i in {10..1}
do
  echo 变量是:$i
done

for i in {10..1..2}
do
  echo 变量是:$i
done

使用Linux的seq命令进行范围的表达:

for i in `seq 1 10`			#开始  结束
do
  echo 变量是:$i
done

for i in `seq 1 2 10`		#开始 步长 结束
do
  echo 变量是:$i
done

for i in `seq 10 -1 1` 	#从大到小,步长要写成负数
do
  echo 变量是:$i
done

min=1
max=10
for i in `seq $min $max`
do
  echo 变量是:$i
done

使用数组的内容进行循环

fruits=(apple orange banana)
for f in ${fruits[*]}
do
  echo 变量是:$f
done

使用其它系统命令进行循环

for i in `ls /opt`
do
  echo 文件名字是:$i
done

使用类C语言的方式进行循环

for ((i=1;i<=10;i++))
do
  echo 变量是:$i
done

for ((i=1;i<=10;i+=2))
do
  echo 变量是:$i
done

while循环

语法
whlie [循环条件]
do
执行语句
done
练习:
有一张纸的厚度是1毫米,珠穆朗玛峰高度是8848米,试问纸折几次厚度会超过山

#!/bin/bash
zhi=1
mount=8848000
count=0
while [ $zhi -lt $mount ]
do
 let zhi=zhi * 2
 let count++
done
echo "$count:$zhi"

函数

定义函数

语法
function 函数名(){
代码块
return 返回值
}

  • 不写参数,小括号是为了与其他语言匹配
  • 返回值不是必须的,shell的函数中,返回值只能返回 0-255 的数字,这个数字的返回一般是用来给调用者去判断函数的执行是否成功的。
  • 可以把linux的每一个命令,都当成系统定义好的函数来看待,例如 touch a.txt,touch本身是一个函数,a.txt是传递给函数的一个参数值。所以命令都有返回值,如果返回值是0,就表示操作成功,其他数字都是失败。
  • $? 是返回值
  • $* 是所有的参数
  • $# 是参数的数量
  • $数字 是指定位置的参数,$1 $2
  • 在文件里面,调用函数的时候,参数也可以写成 $ 的形式表示这里不定义参数,这里也是在接受参数,参数是在调用文件的时候,写在文件名字后面的。例如: sh t3.sh 1 2 3

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

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

相关文章

Hutool:Java开发者的瑞士军刀

有想念&#xff0c;才是团圆&#xff1b;在一起&#xff0c;便是中秋。 在Java的世界里&#xff0c;有这样一个工具库&#xff0c;它小巧而强大&#xff0c;功能丰富且易于使用&#xff0c;它就是Hutool。Hutool是一个Java工具包&#xff0c;旨在减少Java开发人员在开发过程中…

Oracle数据库逻辑与物理结构操作

一、实验步骤 1、查询所有DBA和USER开头的静态数据字典 2、查询所有V$动态性能视图 3、查询当前数据库中的表空间信息 ①查询和TABLESPACE相关的数据字典 ②通过动态性能视图查询表空间信息 ③通过数据字典查询表空间信息 4、操作数据文件 &#xff08;1&#xff09;向 ORC…

JavaWeb JavaScript 11.XML —— 配置文件

生活想埋没我&#xff0c;没想到我是颗种子 —— 24.9.19 一、XML 1.什么是XML XML是EXtensible Markup Languge的缩写&#xff0c;翻译过来就是可扩展标记语言。所以很明显&#xff0c;XML和HTML一样都是标记语言&#xff0c;也就是说它们的基本语法都是标签 可扩展 三个字…

网络:UDP协议

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《Linux》 文章目录 前言UDP协议报头和有效载荷分离的问题有效载荷向上交付的问题&#xff0c;也就是交给哪个进程&#xff1f;怎么确定把报文收全了&#xff1f;UDP报头是如何封装的呢&…

JavaWeb纯小白笔记02:Tomcat的使用:发布项目的三种方式、配置虚拟主机、配置用户名和密码

通过Tomcat进行发布项目的目的是为了提供项目的访问能力&#xff1a;Tomcat作为Web服务器&#xff0c;能够处理HTTP请求和响应&#xff0c;将项目的内容提供给用户进行访问和使用。 一.Tomcat发布项目的三种方式&#xff1a; 第一种&#xff1a;直接在Tomcat文件夹里的webapp…

数学建模 第一讲 - 概论

一、什么是数学模型 一个栗子 例 1.1 一只装满水的圆柱型桶&#xff0c;底半径为 1米&#xff0c;高为 2米&#xff0c;底部有一直径为 0.1 米的洞。问桶流空要多少时间? 数学模型是对于一个特定的对象为了一个特定目标&#xff0c;根据事物的内在规律&#xff0c;作出一些必…

防止用户过于轻松采集网页内容的方法

面对AI&#xff0c;所有禁止采集网页内容的功能都是徒劳&#xff0c;最不济截图后采集文字总简单了吧&#xff1f;能做的就是增加一点点人工采集的难度。 以下总结一下 一、注册用户 必须注册才能浏览全部内容&#xff0c;那么这样就可以针对用户控制其浏览次数&#xff0c;浏…

ActiveMQ、RabbitMQ 和 Kafka 在 Spring Boot 中的实战

在现代的微服务架构和分布式系统中&#xff0c;消息队列 是一种常见的异步通信工具。消息队列允许应用程序之间通过 生产者-消费者模型 进行松耦合、异步交互。在 Spring Boot 中&#xff0c;我们可以通过简单的配置来集成不同的消息队列系统&#xff0c;包括 ActiveMQ、Rabbit…

多层感知机paddle

多层感知机——paddle部分 本文部分为paddle框架以及部分理论分析&#xff0c;torch框架对应代码可见多层感知机 import paddle print("paddle version:",paddle.__version__)paddle version: 2.6.1多层感知机&#xff08;MLP&#xff0c;也称为神经网络&#xff0…

QEMU:模拟 ARM 大端字节序运行环境

文章目录 1. 前言2. ARM 大小端模拟测试2.1 裸机模拟测试2.1.1 大端模拟测试2.1.2 小端模拟测试 2.2 用户空间模拟测试2.2.1 大端模拟测试2.2.2 小端模拟测试 2.3 结论 3. 参考链接 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&…

leetcode刷题3

文章目录 前言回文数1️⃣ 转成字符串2️⃣ 求出倒序数再比对 正则表达式匹配[hard]1️⃣ 动态规划 盛最多水的容器1️⃣ 遍历分类2️⃣ 双指针贪心 最长公共前缀1️⃣ 遍历&#xff08;zip解包&#xff09; 三数之和1️⃣ 双指针递归 最接近的三数之和1️⃣ 迭代一次双指针 电…

携手阿里云CEN:共创SD-WAN融合广域网

在9月19日举行的阿里云云栖大会上&#xff0c;犀思云作为SD-WAN领域的杰出代表及阿里云的SD-WAN重要合作伙伴&#xff0c;携手阿里云共同推出了创新的企业上云方案——Fusion WAN智连阿里云解决方案。这一创新方案不仅彰显了犀思云在SD-WAN技术领域的深厚积累&#xff0c;更体现…

前端web端项目运行的时候没有ip访问地址

我们发现 没有netWork 的地址 导致 团队内其他同学无法打开我们的地址 进行访问 在page.json 中的运行 指令中 添加 --host 记得加上空格 这样我们就可以看到这个地址了 团队其他同学 就可以访问我们这个地址了

Resnet50网络——口腔癌病变识别

一 数据准备 1.导入数据 import matplotlib.pyplot as plt import tensorflow as tf import warnings as w w.filterwarnings(ignore) # 支持中文 plt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus] False # 用来正常显示负…

2024华为杯研究生数学建模竞赛(研赛)选题建议+初步分析

难度&#xff1a;DE<C<F&#xff0c;开放度&#xff1a;CDE>F。 华为专项的题目&#xff08;A、B题&#xff09;暂不进行选题分析&#xff0c;不太建议大多数同学选择&#xff0c;对自己专业技能有很大自信的可以选择华为专项的题目。后续会直接更新A、B题思路&#…

计算机网络传输层---课后综合题

线路&#xff1a;TCP报文下放到物理层传输。 TCP报文段中&#xff0c;“序号”长度为32bit&#xff0c;为了让序列号不会循环&#xff0c;则最多能传输2^32B的数据&#xff0c;则最多能传输&#xff1a;2^32/1500B个报文 结果&#xff1a; 吞吐率一个周期内传输的数据/周期时间…

2024/9/19、20 数学20题

极大线性无关组&#xff1a;

基于C#+SQL Server2005(WinForm)图书管理系统

图书管理系统 一、 首先把数据库脚本贴出来(数据库名为library) USE [library] GO /****** Object: Table [dbo].[books] Script Date: 06/12/2016 11:27:12 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[books]([bNum] [nvarchar](10…

Arthas sysprop(查看和修改JVM的系统属性)

文章目录 二、命令列表2.1 jvm相关命令2.1.4 sysprop&#xff08;查看和修改JVM的系统属性&#xff09;举例1&#xff1a;sysprop 查看所有系统属性举例2&#xff1a;sysprop java.version 查看单个属性&#xff0c;支持通过tab补全 二、命令列表 2.1 jvm相关命令 2.1.4 sysp…

STL-常用算法 遍历/查找/排序/拷贝和替换/算数生成/集合算法

STL常用算法 常用的遍历算法 for_each #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; #include<vector> #include<algorithm>void myPrint(int v) {cout << v << " "; }class MyPrint { public:void op…