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…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...