详解Linux的shell脚本基础指令

news2024/9/20 20:34:11

一、shell简介

是Linux系统的用户界面,它提供用户与内核的一种交互方式。它接收用户输入的命令,并把它送入内核去执行,是一个命令解释器。
脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译)
shell 既是应用程序,又是一种脚本语言(应用程序 解析 脚本语言)。

二、脚本的调用形式

2.1 终端手动执行

./xxx.sh 先按照#!指定的解析器解析,如果找不到使用默认解析

2.2 开机运行

2.2.1 方法一

修改文件位置:/etc/rc.local(或者/etc/rc.d/rc.local)
1 编辑rc.local文件(命令后面得加&号,表示后台运行)
2 修改rc.local文件

chmod +x /etc/rc.local

之后将写好的脚本(.sh文件)放到目录 /etc/profile.d/ 下,系统启动后就会自动执行该目录下的所有shell脚本。

2.2.2 方法二

使用以下命令写好将的脚本加权限:

chmod +x 某.sh

将.sh文件放到目录 /etc/init.d/ 目录下

sudo cp slam.sh /etc/init.d/

2.2.3方法三

gnome实现开机自启
gnome-session-properties

前台后台启动

当你启动一个进程时(运行一个命令),可以如下两种方式运行该进程:

  • 1 前台进程
  • 2 后台进程

默认情况下,启动的每一个进程都是运行在前台的。它从键盘获取输入并发送它的输出到屏幕。
当一个进程运行在前台时,我们不能在同一命令行提示符下运行任何其他命令(启动任何其他进程),因为在程序结束它的进程之前命令行提示符不可用。
启动一个后台进程最简羊的方法:添加一个控制操作符“&”到命令的结尾。例如,如下命令将启动一个后台进程:

$ sleep 10 &
现在 sleep 命令被放在后台运行。当 Bash 在后台启动一个作业时,它会打印一行内容显示作业编号([1])和进程号(PID-5720)。
当作业完成时,作业会发送类似如下的信息到终端程序,来显示此作业已完成,其内容类似如下所示:
[1]+ Done sleep 10
将进程放在后台运行的好处:你可以继续运行其他命令,而不需要等待此进程运行完成再运行其他命令。

下面将启动两个将slam放在后台启动的脚本程序

#!/bin/bash
source /opt/ros/noetic/setup.bash
source /home/qqstar/catkin_loam/devel/setup.bash
pkill -f mapping_velodyne.launch
pkill -f run_ford.launch
sleep 1s
roslaunch lio_sam run_ford.launch &
sleep 1s
roslaunch fast_lio mapping_velodyne.launch &

如何查看进程:使用ps -ef查看当前所有的进程:

列的含义说明:

  • UID: 该进程执行的用户id
  • PID: 进程id
  • PPID: 该进程的父级进程id,如果一个程序的父级进程找不到,该程序的进程被称为僵尸进程
  • C: cpu的占用率,形式是百分数(%)
  • STIME: 进程的启动时间
  • TTY: 终端设备,发起该进程的设备识别符号,如果显示‘ ?’表示该进程并不是由终端发起
  • TIME: 进程的执行时间
  • CMD: 该进程的名称或对应的路径

进程可以有如下几种状态:

  • D(不可中断休眠状态)——进程正在休眠并且不能恢复,直到一个事件发生为止。
  • R(运行状态)——进程正在运行。
  • S(休眠状态)——进程没有在运行,而在等待一个事件或是信号。
  • T(停止状态)——进程被信号停止,比如,信号 SIGINT 或 SIGSTOP。
  • Z(僵死状态)——标记为 的进程是僵死的进程,它们之所以残留是因为它们的父进程适当地销毁它们。如果父进程退出,这些进程将被 init 进程销毁。

若要查看指定进程的状态,可以使用如下命令:
ps -C processName -o pid=,cmd,stat
例如:
$ ps -C sleep -o pid=,cmd,stat

要查看具体进程,可以使用如下命令:
命令:ps -ef | grep 进程名称

三、基本语法

3.1 开启新的终端

开启新的终端窗口,然后执行指令
gnome-terminal -- roslaunch lio_sam run_ford.launch
在已有的终端窗口新建标签栏,然后执行命令
gnome-terminal -x roslaunch lio_sam run_ford.launch

例子:
gnome-terminal -x bash -c "roslaunch lego_loam spiod.launch; exrc bash"
解释:
1、gnome-terminal -x:启动一个新的gnome-terminal窗口。

2、bash -c “roslaunch lego_loam spiod.launch; exrc bash”:在新的gnome-terminal窗口中执行的命令。这里使用了bash -c来执行一系列命令。
具体的命令包括:
roslaunch lego_loam spiod.launch:启动名为spiod.launch的ROS启动文件。
exrc bash:执行exrc命令并指定bash作为参数。根据给出的命令,无法确定exrc命令的具体含义。如果这是一个自定义的命令,那么它将在启动spiod.launch后执行。

3.2 向进程发送信号(kill、pkill)

使用 pkill 命令,可以通过指定进程名、用户名、组名、终端、UID、EUID 和 GID 等属性来杀掉相应的进程。pkill 命令默认也是发送 SIGTERM 信号到进程。
SIGTERM 信号:当进程收到 SIGTERM 信号时,有机会按照已经设计好的流程执行
pkill -f test.launch

3.3 函数

#计算所有参数的和
func.sh 文件内容:

function sum(){
	local total=0
	for n in $@
    do
    	((total+=n))
    done

    echo $total
    return 0
}

main.sh 文件内容:

#!/bin/bash
source func.sh
echo $(sum 10 20 55 15)

Linux常用命令

ps -u

用于显示指定用户(User)相关的进程(Process)信息。它可以用于列出指定用户正在运行的进程以及与这些进程相关的详细信息。

更具体地说,ps -u 命令的 -u 选项后面需要指定一个用户名(User Name),以显示与该用户关联的进程。该命令将列出该用户拥有的进程的详细信息,如进程 ID(PID)、父进程 ID(PPID)、CPU 使用情况、内存使用情况等。
ps -u username

kill -9

一个用于终止进程的命令,而 24656 是一个示例进程的进程ID(PID)。

在 Linux 中,kill 命令用于向指定的进程发送信号,而 -9 是一个特殊的信号编号,表示强制终止进程。
通过执行以下命令:

kill -9 24656

可以向具有进程ID为 24656 的进程发送强制终止信号。这将立即终止该进程,不给予其进行任何清理或资源释放的机会。

请注意,使用 kill -9 命令要谨慎,因为它会直接终止进程,可能导致数据丢失或其他不良后果。通常情况下,首选使用其他信号(如 SIGTERM)来正常终止进程,以便进程有机会进行清理和资源释放。只在必要时,才使用 kill -9 来强制终止进程。

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

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

相关文章

数学系C++(六七)

目录 * &指针与地址 void指针 指针可以等于: const 指向常量的指针 const int *px 常指针 int * const px 指向常量的常指针const 类型标识符 * const 指针名 指针加减: 指针恒等式 函数指针【待续】 指针型函数: 指向函数的…

【mindspore进阶】02-ResNet50迁移学习

Mindspore 应用(2)ResNet50迁移学习 在实际应用场景中,由于训练数据集不足,所以很少有人会从头开始训练整个网络。普遍的做法是,在一个非常大的基础数据集上训练得到一个预训练模型,然后使用该模型来初始化…

关于Python的电影信息爬取与数据可视化分析报告

目录 1 引言 1.1 研究背景 1.2 研究目的 1.3 研究意义 2 相关技术介绍 2.1 Python语言及其应用领域 2.2 网络爬虫技术 2.3 数据可视化技术 2.4 PyCharm 2.5 Jupyter Notebook 3 数据爬取 4 数据预处理 5 数据分析及可视化 5.1数据分析背景 5.2从电影评分角度分析…

嵌入式开发SPI基本介绍与应用

目录 #SPI通信协议 #SPI基础概念 #SPI通信模式 #SPI通信时序类型 前言:本篇笔记参考嘉立创的开发文档,连接放在最后。 #SPI通信协议 #SPI基础概念 Serial Peripheral Interface 缩写SPI 翻译:串行外设接口 同步串行通信协议&…

运维系列.Nginx配置中的高级指令和流程控制

运维专题 Nginx配置中的高级指令和流程控制 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/…

镭速实现大文件传输软件预览功能

在当前的数字时代,大文件传输软件成为了提高工作效率和文件管理便捷性的关键工具。镭速作为其中的一员,以其独特的功能和优势,为用户提供了多样化的文件预览和传输解决方案。 目前镭速支持对文档格式文件,一般图片格式及视频格式…

非比较排序 计数排序

1.核心思路 首先要找出max 和 min,最大值 - 最小值 1,就可以计算出数据在什么范围然后创建计数数组大小,a[i] - min 在数组的相对位置计数 通过自然序列排序然后把计数好的值,按照顺序依次放回原数组即可 动图解释,其…

Nettyの源码分析

本篇为Netty系列的最后一篇,按照惯例会简单介绍一些Netty相关核心源码。 1、Netty启动源码分析 代码就使用最初的Netty服务器案例,在bind这一行打上断点,观察启动的全过程: 由于某些方法的调用链过深,节约篇幅&#xf…

Nuxt框架中内置组件详解及使用指南(二)

title: Nuxt框架中内置组件详解及使用指南(二) date: 2024/7/7 updated: 2024/7/7 author: cmdragon excerpt: 摘要:“本文详细介绍了Nuxt 3中和组件的使用方法,包括组件的基本概念、属性、自定义属性、获取引用以及完整示例&a…

利用redis Zset实现 排行榜功能 配合xxl-job持久化每一个赛季的排行榜

zset 可以排序 使用xxl-job实现定时任务 对历史排行榜持久化到数据库 排行榜有当前赛季排行版和历史排行榜 当前赛季排行榜利用redis 中的SortSet 数据结构 获取 每个月的 月初 利用xxl-job的定时任务持久化化上一个月的排行榜信息 并删除redis中的数据 当排行榜数据量巨大时…

【技术追踪】GeCA:高分辨率医学图像合成的神经元胞扩散(MICCAI-2024)

扩散方法与传统方法相结合,挺有意思~ 本文提出一种称为生成式元胞自动机 (Generative Cellular Automata,GeCA) 的新模型系列,其灵感来自于生物体从单细胞进化而来的过程,显著提高了11 种不同眼科疾病分类任务的表现。 论文&#…

k8s 部署 springboot 项目内存持续增长问题分析解决

写在前面 工作中遇到,请教公司前辈解决,简单整理记忆博文内容涉及一次 GC 问题的分析以及解决理解不足小伙伴帮忙指正 😃,生活加油 99%的焦虑都来自于虚度时间和没有好好做事,所以唯一的解决办法就是行动起来,认真做完…

ES7210高性能四通道音频ADC转换模拟麦克风为IIS数字咪头

特征 高性能多位 Delta-Σ 音频 ADC 102 dB 信噪比 -85 分贝 THDN 24 位,8 至 100 kHz 采样频率 I2S/PCM 主串行数据端口或从串行数据端口 支持TDM 256/384Fs、USB 12/24 MHz 和其他非标准音频系统时钟 低功耗待机模式 应用 麦克风阵列 智能音箱 远场语音捕获 订购…

npm安装完yarn还是用不了?

前言 解决 找到你的包全局安装目录 复制路径,配置到Path全局环境变量 结果 不过发现在idea里还是用不了,此时你会想,这什么烂贴,没一点屁用 不过在重启idea之后,你也许就不会这么想了

【网络安全】实验五(身份隐藏与ARP欺骗)

一、本次实验的实验目的 (1)了解网络攻击中常用的身份隐藏技术,掌握代理服务器的配置及使用方法 (2)通过实现ARP欺骗攻击,了解黑客利用协议缺陷进行网络攻击的一般方法 二、搭配环境 打开三台虚拟机&#…

本地多卡(3090)部署通义千问Qwen2-72B大模型提速实践:从龟速到够用

最近在做文本风格转化,涉及千万token级别的文本。想用大模型转写,在线的模型一来涉及数据隐私,二来又不想先垫钱再找报销。本地的7-9B小模型又感觉效果有限,正好实验室给俺配了4卡3090的机子,反正也就是做个推理&#…

掌握MySQL基础命令:数据表结构修改详细操作

MySQL数据表(Table)是MySQL数据库中存储数据的基本结构单元。简单来说,数据表可以被看作是一个二维的、由行(Row)和列(Column)组成的表格,其中每一行代表了一个记录(Reco…

微服务的分布式事务解决方案

微服务的分布式事务解决方案 1、分布式事务的理论模型1.1、X/Open 分布式事务模型1.2、两阶段提交协议1.3、三阶段提交协议 2、分布式事务常见解决方案2.1、TCC补偿型方案2.2、基于可靠性消息的最终一致性方案2.3、最大努力通知型方案 3、分布式事务中间件 Seata3.1、AT 模式3.…

数据跨境法案:美国篇上

近年来随着全球数字化的加速发展,数据已成为国家竞争力的重要基石。在这样的背景下,中国软件和技术出海的场景日益丰富。本系列邀请到在跨境数据方面的研究人员针对海外的数据跨境政策进行解读。 本期将针对美国对数据跨境流动的态度和政策进行阐释。过…

基础权限存储

一丶要求 建立用户组shengcan,其id为 2000建立用户组 caiwu,其id 为2001建立用户组 jishu,其id 为 2002建立目录/sc,此目录是 shengchan 部门的存储目录,只能被 shengchan 组的成员操作4.其他用户没有任何权限建立目录/cw,此目录…