Linux:shell脚本:基础使用(1)
Shell的作用
命令解释器,“翻译官”,介于系统内核与用户之间,负责解释命令行
用户的登录Shell
登录后默认使用的Shell程序,一般为 /bin/bash
不同Shell的内部指令、运行环境等会有所区别
cat /etc/shells

编写第一个Shell脚本
格式以*.sh
*是你起的名字,什么名字无所谓,但是结尾必须是sh为结尾的
vim ceshi.sh
里面可以写一些命令,他执行bash命令是依次从上到下执行的
由于是刚刚接触,可以先编写一些简单的语句,这里所谓的语句,就是平时使用的命令

你可以随便写一些,目前这个还是很好理解的
执行脚本的办法
一:./脚本文件路径
二:sh 脚本文件路径
三:source 脚本文件路径
使用第一种要为其设置执行权限 ./脚本文件路径

chmod +x ceshi.sh

第二种和第三种可以不给执行权限 但是他们的结果都是一样的


三种执行方式,都是一样的效果

写入的都是依次执行的
更完善的脚本构成
为了更完善脚本,向上面那样,也是可以执行的,但是可能会给后来的人添加难度

最好是第一排声明脚本运行的环境
注释信息 以‘#’开头的行为注释行 ,注释行不会执行
重定向
【类型】【操作符】【用途】
重定向输入 ; < ; 从指定的文件读取数据,而不是从键盘输入
重定向输出; > ;将输出结果保存到指定的文件(覆盖原文件)
重定向输出;>>; 将输出结果追加到指定的文件
标准错误输出;2> ;将错误信息保存到指定的文件(覆盖原文件)
标准错误输出;2>>; 将错误信息追加到指定的文件中
混合输出;&> ; 将标准输出、标准错误的内容保存到同一个文件中
例如下面的
uname -p > kernel.txt
# 将uname 输出的东西写入到 kernel.txt中,并覆盖原有内容
uname -r >> kernel.txt
#将输出内容追加到 kernel.txt ,不会覆盖原文件内容,只是在结尾处新加追加内容
echo "123456" > pass.txt
cat pass.txt
useradd tom
passwd --stdin tom < pass.txt
# 将pass.txt文件内容当成密码,输入到tom的密码里,也就是把tom密码设置为123456
管道操作
将左侧的命令输出结果,作为右侧命令的处理对象
也就是说,第一次的结果上再次进行第二次处理
例如:
df -hT

查看磁盘使用情况
df -hT | grep '/$'

查看磁盘使用情况 ,并检索前面输出内容中以/结尾的
df -hT | grep '/$' | awk '{print $1}

查看磁盘使用情况 ,并检索前面输出内容中以/结尾的,并查看里面的第一个信息 默认是以空格切割开的,$1 就是第一块 $4就是第四块 $1,$3就是看第1块和第三块1的

自定义变量
变量名=变量值
变量名以字母或下划线开头,区分大小写,建议全大写
如果要查看的话可以使用
echo $变量名
变量名=变量值

定义了一个变量 为a赋值了,如果要查看
echo $变量名

现在我们再赋值一个b值为world

输出多个变量可以使用
echo $变量名 $变量名 (中间有没有空格都可以)
变量后面添加别的可以使用
echo ${变量名}其他的字符

赋值时使用引号的含义
双引号 "

可以有空格或者其他其他符号 但是写了变量格式,就会输出变量
单引号 '

使用变量并不会生效,同时也支持符号
反撇符号的使用 `
例如:
ls -lh `which useradd`

其中的含义和 ls -lh /usr/sbin/useradd 是一样的
他会优先处理 ·· 里的内容然后将 ·· 的输出内容添加到前面的命令中
rpm -qc `rpm -qf `which useradd``
例如这个意思上是对的但是输出结果不对,我们还有另外一种写法
rpm -qc $(rpm -qf $(which useradd))
也是依次执行
先执行最里面的

read输入变量
read 变量名
输入变量内容

输入完变量值后回车

如果需要带有输入提示的read可以使用
read -p '提示语句' 变量名

现在ppp的变量值为hello world
设置变量的作用范围
变量范围分为局部变量和全局变量
向上面我们设置的变量全为局部变量

如上图,我们在bash里设置了变量,当我们在当前bash里查看就可以查看到,当我们切换进入子bash里查看就查看不到了-------这个就是局部变量
设置全局变量
export 变量名=变量值

将局部变量转换为全局变量

现在q和w均为局部变量
使用
export 变量名 后面可以跟多个变量名
export 变量名 变量名 ……

整数变量的运算(expr)
expr 变量1 运算符 变量2 [运算符 变量3] ...
常用运算符
*加法运算:+*减法运算: -
*乘法运算: \*
*除法运算: /
*求模(取余)运算: %
$() --- 命令嵌套``
${} ----- 解决变量名混淆问题
$(()) --- 实现整数的混合运算

特殊的Shell变量
由系统提前创建,用来设置用户的工作环境
配置文件: /etc/profile、~/.bash_profile
常见的环境变量:
*PWD、PATH
*USER 、SHELL、HOME

这些我们没有手动创建,是系统自动创建的
例如我们制作用户登录的欢迎脚本
vim /opt/tarro.sh写入
#!/bin/bash
echo "欢迎名称为: $USER 的用户登录"
chmod +x /opt/tarro.sh
vim /etc/profile在最后一行输入
source /opt/tarro.sh

位置变量
意思就是当我们在脚本里写了变量,但是没有明确给变量的变量值
我们可以在执行脚本的时候在后面把值写上 空格隔开,每个值对应着相应位置的变量
随便创建一个脚本里面写入


这时hello就对应着$1 world对应着$2

没有明确写变量值的变量可以在执行脚本前后面加上对应的值
相关文章:
Linux:shell脚本:基础使用(1)
Shell的作用 命令解释器,“翻译官”,介于系统内核与用户之间,负责解释命令行 用户的登录Shell 登录后默认使用的Shell程序,一般为 /bin/bash 不同Shell的内部指令、运行环境等会有所区别 cat /etc/shells 编写第一个Shell脚本 …...
carla中lka实现(一)
前言: 对于之前项目中工作内容进行总结,使用Carla中的车辆进行lka算法调试,整体技术路线: ①在Carla中生成车辆,并在车辆上搭载camera,通过camera采集图像数据; ②使用图像处理lka算法&#…...
常见的数据结构(顺序表、顺序表、链表、栈、队列、二叉树)
线性表(Linear List) 1.什么是线性表 2.线性表的特点 3.线性表的基本运算 顺序表 1.什么是顺序表 2.时间复杂度: 链表 1.什么是链表 2.单向链表 3. 双向链表 4.ArrayList和LinkedList的使用 栈Stack 1.什么是栈 2.栈的基本方法 队列…...
(12)理解委托,反射,Type,EvenInfo,插件, 组合枚举,BindingFlags,扩展方法及重载,XML认识
一、复习委托事件 1、委托复习。 private delegate int MyDelegate(int a, int b); //1.定义委托类型private static void Main(string[] args){MyDelegate md new MyDelegate(AddDelegate);//2.声明委托变量int result md(1, 2);//3.调用委托Console.WriteLine(result);Cons…...
软件建设方案技术方案实施方案密码评测方案等保测评方案人员培训方案项目建设与运行管理项目招标方案模板目录
第一章 项目概述 1.项目名称(包含项目全称和简称) 2.项目建设单位及负责人、项目责任人 3.项目建设依据 (1)政策依据(主要从国家、省、市、行业部门相关的政策文件要求等方面进行描述) (2)技术标准 4.项目建设目标、建设任务 5.项目主要建设内容、规模、建设周期…...
pytorch中torch.einsum函数的详细计算过程图解
第一次见到 rel_h torch.einsum(“bhwc,hkc->bhwk”, r_q, Rh)这行代码时,属实是懵了,网上找了很多博主的介绍,但都没有详细的说明函数内部的计算过程,看得我是一头雾水,只知道计算结果的维度是如何变化的…...
【iOS】App仿写--天气预报
文章目录 前言一、首页二、搜索界面三、添加界面四、浏览界面总结 前言 最近完成了暑假的最后一个任务——天气预报,特此记录博客总结。根据iPhone中天气App的功能大致可以将仿写的App分为四个界面——首页,搜索界面,添加界面,浏…...
快速远程桌面控制公司电脑远程办公
文章目录 第一步第二步第三步 远程办公的概念很早就被提出来,但似乎并没有多少项目普及落实到实际应用层面,至少在前几年,远程办公距离我们仍然很遥远。但2019年末突如其来的疫情,着实打了大家一个措手不及。尽管国内最初的大面积…...
亚信科技AntDB数据库专家出席数据库标准研讨会并参与研讨
2023年7月12日,全国信息技术标准化技术委员会数据库标准工作组(SAC/TC28/WG31)秘书处组织召开数据库标准研讨会,会议围绕数据库标准工作组2023年上半年开展的标准编制情况进行交流。亚信科技AntDB数据库相关专家出席会议ÿ…...
【我们一起60天准备考研算法面试(大全)-第三十四天 34/60】【前缀和】【北邮】
专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录) 文章字体风格: 红色文字表示&#…...
【数据分析】numpy (二)
numpy作为数据分析,深度学习常用的库,本篇博客我们来介绍numpy的一些进阶用法: 一,numpy的常用简单内置函数: 1.1求和: a np.array([[1, 2],[3, 4]]) np.sum(a)10 1.2求平均值: np.mean(a…...
Vue3小案例—v-model 双向数据绑定实现动态列表增加和删除
v-model双向绑定的原理: v-model 是Vue.js 提供的一个指令,用于实现双向数据绑定,它可以将表单元素的值与Vue实例的数据绑定在一起,当表单元素的值发生改变时,Vue实例的数据也会随之更新,反之亦然。 …...
MySQL 重置root 密码
5.7 版本 首先要把服务mysql57 关闭 net stop MySQL57 在安装的mysql57的程序的bin中 运行cmd(管理员运行) mysqld --defaults-file‘mysql存放数据的位置\my.ini’ --skip-grant-tables 上图 错误 注意:如果遇到mysqld: Can’t change dir…...
OpenCV图像处理技巧之空间滤波
1. 引言 再次问好,图像处理爱好者们!🌟 在前面的章节中,我们学习了图像处理的基础知识,并展现了图像增强的魅力。在这一节中,我们将更深入地研究空间滤波技术。 闲话少说,我们直接开始吧&#…...
Java超级玛丽小游戏制作过程讲解 第一天 创建窗口
package com.sxt;import javax.swing.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener;public class MyFrame extends JFrame implements KeyListener {//设置窗口的大小为800*600public MyFrame() {this.setSize(800, 600);//设置窗口中显示this.setLo…...
【POP3/IMAP/SMTP】QQ邮箱设置
什么是 POP3/IMAP/SMTP 服务 POP3 (Post Office Protocol - Version 3)协议用于支持使用电子邮件客户端获取并删除在服务器上的电子邮件。 IMAP (Internet Message Access Protocol)协议用于支持使用电子邮件客户端交互式存取服务…...
云计算——常见集群策略
作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页 目录 前言 一.什么是集群 二.集群策略 1.虚拟机HA 实现虚拟机高可用性通常涉及以下关键…...
c语言locale.h简介
<locale.h>提供的函数用于控制c标准库中对于不同的地区行为不一样的部分。(地区通常是国家或者某种特定语言的地理区域) 一、locale.h简单介绍 在标准库里,依赖地区的部分通常包括以下几项: 数字量的格式 货币的格式 字符…...
C++运算符重载详解(赋值、流插入流提取、前置后置++、取地址)
C运算符重载详解 基本介绍运算符重载案列1. 赋值运算符重载2. 前置和后置重载3. cout,cin(流插入,流提取重载)4. 取地址重载 基本介绍 C为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其 返回值…...
sql的count函数优化
sql的count(1)函数会执行遍历表统计符合条件的数目,下面有两个sql 第一条: select count(1) from membership_call_detail_statistics a where a.repository_id f2a4ed6b3e074e33bd99998c1def26f8 and a.statistics_date between 2023-04-01 00:00:0…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
