Shell脚本编程(一)

目录

一、Shell命令行的书写规则

二、编写/修改权限及执行shell程序的步骤

1、编写简单Shell程序

2、建立可执行程序

3、执行Shell程序

4、实例

三、Shell程序中使用参数

1、位置参数

2、内部参数

3、实例一

4、实例二


一、Shell命令行的书写规则

        在执行Shell命令时可以多个命令在一个命令上运行,但需要使用分号(;)分隔命令,例如:

        长shell命令行可以使用反斜线字符(\)在命令行上进行扩充,例如:

">"符号是自动产生的,不是输入的。 

二、编写/修改权限及执行shell程序的步骤

        Shell程序有很多类似C语言和其他程序设计语言的特征,但又没有程序语言那么复杂。Shell程序是指放在一个文件中的一系列Linux命令和实用程序。在执行的时候,通过Linux操作系统一个接一个地解释和执行每条命令

1、编写简单Shell程序

        我们先编写一个简单的Shell程序:

        实现功能:保存文件名为date,将其存放在目录/mnt/d下。

#! /bin/bashecho "Mr.$USER, Today is:"
echo &date "+%B %d %A"
echo "Wish you a lucky day!"

       #! /bin/bash 通知采用Bash解释,如果在echo语句中执行Shell命令date,则需要在date命令前加符号“&”,其中%B %d %A为输入格式控制符。

2、建立可执行程序

        编辑完该文件后还不能立即执行该文件,需要给文件设置可执行程序权限,使用如下命令:

3、执行Shell程序

        我们执行这个Shell程序,有三种方法:

        方法一:直接在当前文件夹运行date。

        方法二:使用bash解释程序运行。

        方法三:为了在任何目录都可以编译和执行Shell程序,可以把/mnt/d这个目录添加到整个环境变量中。

4、实例

        编写一个Shell程序mkf,程序功能:显示/mnt/d下的文件信息,然后建立一个kk的文件夹,在此文件夹下建立一个文件aa,修改此文件的权限为可执行。

        分析可知,该Shell程序需要依次执行以下命令:

        进入/mnt/d/test目录:cd /mnt/d

        显示/mnt/d/test目录下的文件信息:ls -l

        新建文件夹kk:mkdir kk

        进入/mnt/d/test/kk目录:cd kk

        新建一个文件aa:vi aa         #编辑完成后需要手动保存

        修改aa文件权限为可执行:chmod +x aa

        回到/mnt/d/test目录:cd /mnt/d/test

#! /bin/bashcd /mnt/d/test
ls -l
mkdir kk
cd kk
vi aa
chmod +x aa
cd /mnt/d/test

三、Shell程序中使用参数

       Shell程序中的参数包括位置参数内部参数等,如同ls命令可以接受目录等作为它的参数一样,在Shell编程时同样可以使用参数。

1、位置参数

        由系统提供的参数称为位置参数。位置参数的值可以用$N得到,N是一个数字,如果为1,即$1。类似C语言中的数组,Linux会把输入的命令字符串分段并给每段进行标号,标号从0开始。第0号为程序名字,从1开始就表示传递给程序的参数。如$0表示程序的名字$1表示传递给程序的第一个参数,以此类推。

2、内部参数

        上述过程中的$0是一个内部变量,它是必须的,而$1可有可无。最常用的内部变量有$0、$#、$?、$*,它们的含义是:

        $0:命令含命令所在的路径

        $#:传递给程序的总的参数数目

        $?:Shell程序在Shell中退出的情况,正常退出返回0,反之是非0值

        $*:传递给程序的所有参数组成的字符串

3、实例一

        编写一个描述Shell程序中的位置参数为:$0、$#、$?、$*,程序名为test1。代码如下:

#! /bin/bashecho "Program name is $0";
echo "There are totally $# parameters passed to this program";
echo "The last is $?";
echo "The parameter are $*";

注意,命令本身不计入参数内。

执行结果为:

4、实例二

        编写一个简单的删除程序,如删除文件名为a,则在终端输入命令为:test a,程序名为test2。

        可见,除命令外至少还有一个位置参数,即$#不能为0,删除不能为$1。程序如下:

#! /bin/bashif test $# -eq 0 thenecho "Please specify a file!"
elsegzip $1        //对文件进行压缩mv $1.gz $HOME/dustbin      //移动到回收站echo "File $1 is deleted!"
fi

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

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

相关文章

搭建本地私有知识问答系统:MaxKB + Ollama + Llama3 (wsl网络代理配置、MaxKB-API访问配置)

目录 搭建本地私有知识问答系统:MaxKB、Ollama 和 Llama3 实现指南引言MaxKB+Ollama+Llama 3 Start buildingMaxKB 简介:1.1、docker部署 MaxKB(方法一)1.1.1、启用wls或是开启Hyper使用 WSL 2 的优势1.1.2、安装docker1.1.3、docker部署 MaxKB (Max Knowledge Base)MaxKB …

便携式气象仪:科技赋能,让气象观测更智能

随着科技的快速发展,越来越多的领域受益于技术的进步。其中,气象观测领域也不例外。传统的气象观测设备虽然精确可靠,但往往体积庞大、携带不便,且需要专业人员进行操作和维护。而便携式气象仪的出现,则打破了这一局限…

在WPF中使用WebView2详解

Microsoft Edge WebView2 Microsoft Edge WebView2 控件允许在本机应用中嵌入 web 技术(HTML、CSS 以及 JavaScript)。 WebView2 控件使用 Microsoft Edge 作为绘制引擎,以在本机应用中显示 web 内容。 使用 WebView2 可以在本机应用的不同部分嵌入 Web 代码&…

Golang | Leetcode Golang题解之第284题窥视迭代器

题目: 题解: type PeekingIterator struct {iter *Iterator_hasNext bool_next int }func Constructor(iter *Iterator) *PeekingIterator {return &PeekingIterator{iter, iter.hasNext(), iter.next()} }func (it *PeekingIterator) hasNe…

宿州市各区县两化融合贯标申请认定奖补奖励和认定条件、材料、周期、流程大全

本文将为大家盘点宿州市各区县两化融合贯标申请认定奖补奖励和认定条件、材料、周期、流程等内容,详情如下,埇桥区、砀山县、萧县、灵璧县、泗县需要申报的可指导! 宿州市各区县两化融合贯标申请认定奖补奖励(仅供参考&#xff0…

学习记录day19——数据结构 查找算法

概念 在给定数据元素的某个值,在查找表中确定一个其关键字等于给定值的数据元素的操作,叫做查找 查找的分类 顺序查找:将待查找数据,进行全部遍历一遍,直到找到要查找的元素 折半查找:每次都去除一半的查找范围的查找方式&#x…

vue3响应式用法(高阶性能优化)

文章目录 前言:一、 shallowRef()二、 triggerRef()三、 customRef()四、 shallowReactive()五、 toRaw()六、 markRaw()七、 shallowReadonly()小结: 前言: 翻别人代码时,总结发现极大部分使用vue3的人只会用ref和reactive处理响…

mysql-bin 恢复数据库

能看到这里的同学估计肯定摊上大事了吧!不要慌,一定要冷静,记录一下作者的大事件吧,黑客通过SQL注入的方式执行了一段SQL : DROP DATABASE ****** 后果就是导致整个数据库被删了,当时心是拔凉拔凉的&#x…

在jmeter中使用javascript脚本

工作上遇到一个压力测试的需求,需要测试几个考试相关的接口。其中有一个获取试题详情的接口,和一个提交答题信息的接口。后一个接口以上一接口的返回内容为参数,添加上用户的答案即可。jmeter提供了非常多的方式可以实现该需求,这…

【深度学习】大模型GLM-4-9B Chat ,微调与部署(3) TensorRT-LLM、TensorRT量化加速、Triton部署

文章目录 获取TensorRT-LLM代码:构建docker镜像并安装TensorRT-LLM:运行docker镜像:安装依赖魔改下部分package代码:量化:构建图:全局参数插件配置常用配置参数 测试推理是否可以代码推理CLI推理 性能测试小…

钡铼网关实时数据互联,加速IEC104与MQTT云平台对接

随着工业4.0时代的到来,电力系统中的数据采集、监控与远程控制需求日益增长。IEC 104(IEC 60870-5-104)作为国际电工委员会(IEC)制定的电力自动化通信协议,广泛应用于电力系统的状态监测、数据采集和设备控…

Vue实现简单小案例

一、创建文件夹 二、引用vue.js <script src"../js/vue.js"></script> 三、准备一个容器 <div id"app"><h1>Hello,{{name}}</h1> </div> 四、创建实例 <script>new Vue({el:"#app", //el用于指…

【STM32 FreeRTOS】FreeRTOS的移植

其实这篇文章不侧重移植&#xff0c;因为我们会使用CubeMX配置&#xff0c;那样会自动移植FreeRTOS。 关于FreeRTOS&#xff0c;可以参考官网&#xff1a;FreeRTOS - Quick start guide 当我们在CubeMX中配置了CMSIS_V2后尝试编译的时候会有一个弹窗。 第一个问题就是强烈建议…

Qt中的项目文件

QT core gui#core 核心模块 gui 窗口界面模块 # 在Qt4中 core gui widgets 是一体的 greaterThan(QT_MAJOR_VERSION, 4): QT widgets CONFIG c11 #使用C11标准编译 # The following define makes your compiler emit warnings if you use # any Qt feature that h…

Symfony vs. Laravel:框架比较与选择指南

Symfony vs. Laravel&#xff1a;框架比较与选择指南 引言 Symfony和Laravel是PHP领域中两个非常流行的框架&#xff0c;各自拥有庞大的用户群和丰富的功能。然而&#xff0c;它们在设计理念、使用场景和开发体验等方面存在显著差异。本文将深入比较Symfony和Laravel&#xf…

【深度学习】yolov8-det目标检测训练,拼接图的分割复原

项目背景 https://blog.csdn.net/x1131230123/article/details/140606459 似乎这个任务是简单的&#xff0c;利用目标检测是否可以完成得好呢? 生成数据集 利用这个代码产生数据集&#xff1a; 为了将标签转换为YOLOv5格式&#xff0c;需要将左上角和右下角的坐标转换为Y…

【性能测试-登录时密码加密存储如何传参】

目的】 登录接口&#xff0c;密码加密传输&#xff0c;开发不做处理的情况下&#xff0c;密码如何加密传输 【方案】 使用前置处理器&#xff1a;JSR223 预处理程序&#xff0c;主要是在执行登录接口前将密码按照加密算法获得对应的加密密码&#xff0c;并传入接口 【说明】前…

MVC(Model-View-Controller)架构简介

MVC&#xff08;Model-View-Controller&#xff09;架构是一种常用的软件设计模式&#xff0c;特别是在Web应用程序开发中。它将应用程序分为三个主要组件&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&…

如何对视频文件加密_如何加密视频文件_视频文件如何加密

“嘿&#xff0c;小李&#xff0c;你知道咱们公司的新项目资料都是视频形式的吗&#xff1f;这些视频里有很多机密信息&#xff0c;我们需要好好保护起来。” “是啊&#xff0c;我也在想这个问题。你有没有什么好办法来加密这些视频文件呢&#xff1f;” “我听说有个叫域智盾…

apt update 报错移除ppa

1. 列出所有 PPA 源 首先&#xff0c;列出所有已添加的 PPA 源&#xff0c;以确认哪些需要移除 ls /etc/apt/sources.list.d/ 2. 移除特定的 PPA 源 cd /etc/apt/sources.list.d/rm 想要移除的的ppa