shell封装

shift

命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理(常见于Linux中各种程序的启动脚本)

shift(shift 1) 命令每执行一次,变量的个数($#)减一,移动2位可以 执行2次shift

Shell脚本$变量的含义

1、$#:表示执行脚本传入参数的个数

2、$*:表示执行脚本传入参数的列表(不包括$0)

3、$$:表示进程的id;Shell本身的PID(ProcessID,即脚本运行的当前 进程ID号)

4、$!:Shell最后运行的后台Process的PID(后台运行的最后一个进程的 进程ID号)

5、$@:表示执行脚本传入参数的所有个数(不包括$0)

6、$0:表示执行的脚本名称

7、$1:表示第一个参数

8、$2:表示第二个参数

9、$?:表示脚本执行的状态,0表示正常,其他表示错误

(())双小括号

双小括号 (( )) 是 Bash Shell 中专门用来进行整数运算的命令,不能对小数(浮点数)或者字符串进行运算。

[[]]和[]

尽量使用[[ … ]]条件判断结构, 而不是[ ], 能够防止脚本中的许多逻辑错误. 比如,&&, ||, <, 和> 操作符能够正常存在于[[]]条件判断结构中, 但是如果出现在[ ]结构中的话, 会报错。

[]

[ ] 两个符号左右都要有空格分隔
内部操作符与操作变量之间要有空格:如 [ “a” = “b” ]
字符串比较中,> < 需要写成\> \< 进行转义:如 [ “a” < “b” ]
\字符串变量尽量使用"" 双引号扩住,避免值未定义引用而出错
[ ] 中可以使用 –a –o 进行逻辑运算
[ ] 是bash 内置命令

[[]]

[[ ]] 两个符号左右都要有空格分隔
内部操作符与操作变量之间要有空格:如 [[ “a” = “b” ]]
字符串比较中,可以直接使用 > < 无需转义。如 [[ “a” < “b” ]]
[[ ]] 中字符串如未使用"" ,可以通过==和=~进行模式和正则表达式匹配
[[] ] 内部可以使用 && || 进行逻辑运算
[[ ]] 是关键字
[[ ]] 其他用法都和[ ] 一样
[[ ]] 和 [ ] 都可以和 ! 配合使用

case $1 in

;;

命令“;;”指出程序流应该跳到整个case语句的末尾,类似break。


case 需要满足的值 in          #这里设置一个需要满足的条件判断条件1)                #判断条件1,判断该条件是否符合需要满足的值子模块                #如果判断条件为 true,执行子模块1;;                   #结束整个循环判断条件2)               #如果判断条件1没满足需要满足的值,则走到判断条件2,判断该条件是否符合需要满足的值子模块2              #如果判断条件为 true,执行子模块2;;                   #结束整个循环判断条件3)               #如果判断条件2没满足需要满足的值,则走到判断条件3,判断该条件是否符合需要满足的值子模块3                #如果判断条件为 true,执行子模块3;;                   #结束整个循环……*)                      #如果之前的判断条件都没满足需要满足的值,则走到判断条件*子模块4              #走到判断条件*后,不管有没有满足都会执行下面的子模块;;                   #结束整个循环esac                       #结束语法

封装 sh run.sh arg1 arg2

function usage(){echo "Usage: ./run.sh -c /home/work/conf.conf -start /home/work/start.sh"echo "Usage: ./run.sh -c /home/work/conf.conf -stop /home/work/start.sh"
}function help(){}if [$# -eq 0]; thenusageexit 1
ifwhile [$# -gt 0];
do case $1 in -start)shiftSTART_PATH=$1shift;;-stop)shiftSTOP_PATH=$1shift;;-c)shiftCOUNT_TIME=$1if [[ $1 -lt 0]]; thenecho "-c must bigger than 0."exit 1fishift;;-h)usageexit 1;;esac
donefunction check_dir(){if [[! -d "log/" ]];thenmkdir logelseecho "log dir already exist."fi
}

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

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

相关文章

数据结构实现-线性表

顺序存储 #include<iostream> using namespace std; #define MaxSize 50 //静态顺序表 template<typename ElemType> struct sqList{ElemType data[MaxSize];//元素int length;//长度 }; //动态顺序表 #ifdef DEBUG //关闭启用 #define InitSize 100 template<…

嵌入式LINUX移植、配置ssh

编译 https://quantum6.blog.csdn.net/article/details/136299665 编译时指定prefix&#xff0c;产生的文件会自带这个目录。所以直接忽略。 ./configure# 不指定编译路径&#xff0c;手动复制。 复制 编译后的整个目录打包&#xff0c;复制到开发板。写个脚本&#xff0c…

kamacoder13.镂空三角形的C语言解法

13. 镂空三角形 时间限制&#xff1a;1.000S 空间限制&#xff1a;32MB 题目描述 把一个字符三角形掏空&#xff0c;就能节省材料成本&#xff0c;减轻重量&#xff0c;但关键是为了追求另一种视觉效果。在设计的过程中&#xff0c;需要给出各种花纹的材料和大小尺寸的三角…

零拷贝技术深入分析

一、零拷贝 在前面的文章“深浅拷贝、COW及零拷贝”中对零拷贝进行过分析&#xff0c;但没有举例子&#xff0c;也没有深入进行展开分析。本文将结合实际的例程对零拷贝进行更深入的分析和说明。 在传统的IO操作中&#xff0c;以文件通过网络传输为例 &#xff0c;一般会经历以…

go语言是如何连接mysql数据库的?

在 Go 语言中连接 MySQL 数据库通常使用第三方库。目前比较流行的 MySQL 客户端库包括 github.com/go-sql-driver/mysql、github.com/go-xorm/xorm、github.com/jmoiron/sqlx 等。下面是一个使用 github.com/go-sql-driver/mysql 库连接 MySQL 数据库的简单示例&#xff1a; 首…

GOPATH set to GOROOT (/usr/local/go) has no effect

这个警告信息指出 GOPATH 环境变量被设置为与 GOROOT 相同的值。GOPATH 环境变量用于指定 Go 工作区的位置&#xff0c;而 GOROOT 指定 Go 安装的位置。将 GOPATH 设置为 GOROOT 表示 Go 工作区和 Go 安装位置位于同一目录&#xff0c;这是不推荐的。为了解决此问题&#xff0c…

Zookeeper集群docker部署

集群角色 zookeeper 集群中的机器分为一下三种角色 leader:为客户端提供读写服务(事务性操作)&#xff0c;并维护集群状态&#xff0c;它是由集群选举所产生的&#xff1b; follower:为客户端提供读(非事务性操作)&#xff0c;转发给leader写(事务性操作)&#xff0c;参与选举操…

K8s控制器

控制器: Deployment: Deployment概述: replicaset:自动创建pod的控制器 Delpoyment控制器: pod的名字需要唯一,在这不写名字,利用标签进行创建 replicas:表示你想要克隆的数量,selector:通过标签.识别哪个pod是我创建出来的.这里的标签和后面元数据里的标签要一致. Cluster…

NCDA设计大赛获奖作品剖析:UI设计如何脱颖而出?

第十二届大赛简介 - 未来设计师全国高校数字艺术设计大赛&#xff08;NCDA&#xff09;开始啦&#xff01;视觉传达设计命题之一: ui 设计&#xff0c;你想知道的都在这里。为了让大家更好的参加这次比赛&#xff0c;本文特别为大家整理了以往NCDA大赛 UI 设计的优秀获奖作品&a…

【探索AI】十四深度学习之第2周:深度神经网络(三)-过拟合与正则化技术

过拟合与正则化技术 过拟合的概念 在机器学习和深度学习的领域中&#xff0c;过拟合&#xff08;Overfitting&#xff09;是一个常见且重要的问题。首先&#xff0c;我们来理解一下什么是过拟合。 过拟合是指模型在训练数据上表现得过于优秀&#xff0c;以至于在训练集上的错…

2024年腾讯云优惠券_代金券_云服务器折扣券免费领取链接

腾讯云优惠代金券领取入口共三个渠道&#xff0c;腾讯云新用户和老用户均可领取8888元代金券&#xff0c;可用于云服务器等产品购买、续费和升级使用&#xff0c;阿腾云atengyun.com整理腾讯云优惠券&#xff08;代金券&#xff09;领取入口、代金券查询、优惠券兑换码使用方法…

【SpringBean】bean的作用域和bean的生命周期

目录 前言 一 bean的作用域 1. singleton——唯一 bean 实例 2. prototype——每次请求都会创建一个新的 bean 实例 3. request——每一次HTTP请求都会产生一个新的bean&#xff0c;该bean仅在当前HTTP request内有效 4. session——每一次HTTP请求都会产生一个新的 bean&…

程序员的金三银四求职宝典!

目录 ​编辑 程序员的金三银四求职宝典 一、为什么金三银四是程序员求职的黄金时期&#xff1f; 二、如何准备金三银四求职&#xff1f; 1. 完善简历 2. 增强技术能力 3. 提前考虑目标公司 4. 提前准备面试 三、程序员求职的常见面试题 1. 数据结构和算法 2. 数据库 …

一次电脑感染Synaptics Pointing Device Driver病毒的经历,分享下经验

没想到作为使用电脑多年的老司机也会电脑中病毒&#xff0c;周末玩电脑的时候突然电脑很卡&#xff0c;然后自动重启&#xff0c;奇怪&#xff0c;之前没出现这个情况。 重启后电脑开机等了几十秒&#xff0c;打开任务管理器查看开机进程&#xff0c;果然发现有个Synaptics Po…

LeetCode 刷题 [C++] 第121题.买卖股票的最佳时机

题目描述 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的…

php儿童服装销售管理系统计算机毕业设计项目包运行调试

php mysql儿童服装销售网 功能&#xff1a;前台后台 前台&#xff1a; 1.服装资讯 文章标题列表 详情 2.服装选购中心 分页查看图文列表 详情 3.用户注册 登陆 退出 4.服装加入收藏 5.加入购物车 6.对服装进行评论 会员中心&#xff1a; 1.我的账户 查看 修改 2.我的收藏 查看 …

STM32 中断流程介绍

STM32可以产生中断的事件多种多样&#xff0c;比如&#xff1a;定时器时间结束、串口接收到数据、某个GPIO检测到电平变化等等等等。 1、STM32 gpio 中断处理流程介绍 1、从引脚进入的高低电平首先由输入驱动器处理&#xff0c;如下图 2、经过输入驱动器处理后的信号会进…

大数据数据平台的数仓体系分类有哪些?

大数据平台的数仓体系最初由数据库发展而来&#xff0c;主要分为三类架构&#xff0c;分别是Shared-Nothing、Shared-Data、Shared-Everything。 Shared-Nothing&#xff08;也称 MPP&#xff09;架构在 很长一段时间成为主流。 随云原生能力增强&#xff0c;Snowflake 为代表…

c++基础知识补充4

单独使用词汇 using std::cout; 隐式类型转换型初始化&#xff1a;如A a1,,此时可以形象地理解为int i1;double ji;&#xff0c;此时1可以认为创建了一个值为1的临时对象&#xff0c;然后对目标对象进行赋值&#xff0c;当对象为多参数时&#xff0c;使用&#xff08;1&#xf…

c1-周考2

c1-第二周 9月-技能1.一个岛上有两种神奇动物&#xff0c;其中神奇鸟类2个头3只脚&#xff0c;神奇兽类3个头8只脚。游客在浓雾中看到一群动物&#xff0c;共看到35个头和110只脚&#xff0c;求可能的鸟类和兽类的只数2.构建一个长度为5的数组&#xff0c;并且实现下列要求3.构…