shell可能考你但是不常用的基础($篇)
前言
当你面试的时候,可能要说的架构什么都准备好了,也说的七七八八,结果到最后问了一些基础的问题答不上来或者没想起来就很容易造成社会性死亡,一个没答上来道心被破,后面就更容易懵逼了
通常造成这个问题的原因是写脚本的频率和方法,也许对于一个常年工作的人,写脚本的频率是几月写一次,相似的场景复用旧脚本修改,时间长了不注意有的基础就忘了,但是面试的时候面试者可能近期有写脚本或者随手一搜shell基础或者随口一提
所以预计分几篇对这些可能问但有的不常用的shell基础问题进行汇总,这篇文章主要总结了$的相关含义以及具体的应用场景
$# $* $@ $0 $1 $2等都代表了什么?
大致的功能基本是用于向脚本内传递参数,就是说写一个传递参数的脚本,用于执行脚本内的某项功能,这种传参数类的脚本通常是多功能性的,常和函数或者case搭配使用。一般来说配置的越复杂,使用的传参类型越多的脚本,适应的环境或功能越复杂,常见于第三方公司或者某些公司为客户提供以便于用户使用、开源项目或者外挂式脚本(通过网页请求和参数后即可完成某项任务,例如某些病毒以此原理访问即会下载并传播)
而备份,还原,部署,定时任务等只需要完成某一项任务的脚本中通常很少见到$# $@ $*
示例:
/bin/sh test.sh hook
$# 代表传给脚本的参数的个数
sh test.sh hook#!/bin/bash
echo $#
返回值为:
1代表你执行脚本的时候输入了一个参数,$#可用于判断执行该脚本时是否输入了参数,如果输入了参数执行脚本中该参数代表功能,如果没输入参数执行默认的设置或不执行
$@ 列出传给脚本的所有的参数
sh test.sh 1 2 3 4 5 6#!/bin/bash
echo $@
echo "$@"
echo "+++++++++++++++++++"
for i in "$@"
doecho $i
done
返回值为:
1 2 3 4 5 6
1 2 3 4 5 6
+++++++++++++++++++
1
2
3
4
5
6$@会把你执行脚本后面输入的参数都列出来,有文档说加双引号后,可能输出的结果不同,但经过Centos7.9和ubuntu18.04的测试,列出的数量限制和格式都没区别
$@传递参数时是把每一个参数都分开传了一次
$* 列出传给脚本的所有的参数
sh test.sh 1 2 3 4 5 6#!/bin/bash
echo $*
echo "$*"
echo "+++++++++++++++++++"
for i in "$*"
doecho $i
done
返回值为:
1 2 3 4 5 6
1 2 3 4 5 6
+++++++++++++++++++
1 2 3 4 5 6$*也会把你执行脚本后面输入的参数都列出来,有文档说加双引号后,可能输出的结果不同,但经过Centos7.9和ubuntu18.04的测试,列出的数量限制和格式也都没区别
$*传递参数时是把所有参数当作了一个字符串
$0 输出该脚本本身的名字
sh test.sh #!/bin/bash
echo $0
返回值为:
test.sh这个相较于前3个常用,常见于提示性内容的输出中。
当你没输入参数或者输入没有的参数时,进行提示。usage: sh $0 check|start|stop|restart
$1 $2… $n代表传递给该shell脚本的第几个参数
sh test.sh running 1 #!/bin/bash
echo $1
echo $2
返回值为:
running
1这个最常见和显而易见的,会根据第几个参数执行对应的命令。
通常用于输入多个参数后,当判断第一个参数是某个任务后,之后的参数配合前一个参数的任务进行补充性的执行,常见于部署或启动关闭服务等脚本。示例:sh online.sh stop 3 ,假设这是一个主要是上线相关功能的脚本,意思是执行关闭任务,关闭第3个节点
$$ 显示脚本运行的当前进程ID号
sh test.sh running 1 #!/bin/bash
echo $$
返回值为:
2913这个是返回执行这个脚本时的pid,实际应用只能说大多数人用的都很浅,用于提示性内容的输出,例如 脚本执行完成,返回个成功提示,告诉你服务启动完成,当前pid是XXX谁有获得pid后,后续又用其完成某项功能的 可以评论区投稿
$? 对上一条命令的执行结果进行反馈,0表示执行成功,其余数字表示执行不成功
sh test.sh #!/bin/bash
ls fuck1241d.txt
echo $?
返回值为:
2
因为实际没有这个文件,返回值不为0这个是最常用的$参数,常见大多数shell脚本,在shell脚本的实际应用为在执行某个命令后,判断是否成功或者失败,然后再根据成功或失败的反馈,执行不同情况的相应的命令。示例,yum安装某个软件,如果安装失败后,会通过wget或url等别的方式去再安装。
其他
$- 显示 Shell 使用的当前选项
虽然有这个的解释,但是简直无法想象生产里实际用到这个或者问这个问题的是什么人,谁实际生产有使用到这个,可以评论区贴地址,大家去观摩一下
相关文章:
shell可能考你但是不常用的基础($篇)
前言 当你面试的时候,可能要说的架构什么都准备好了,也说的七七八八,结果到最后问了一些基础的问题答不上来或者没想起来就很容易造成社会性死亡,一个没答上来道心被破,后面就更容易懵逼了 通常造成这个问题的原因是写…...
项目管理必备:如何绘制一份优秀的甘特图?
本文一共分为两部分—— 分享60Excel甘特图模板,简单省事儿分享两种甘特图制作教程,高效快捷 第一部分——60甘特图模板 分享一些项目管理甘特图的模板,省事儿!高效!简单! Excel甘特图表模板自取…...
【点云学习】多时相激光雷达点云
多时相雷达数据(multi-tempral LiDAR data) 1 一种多时相激光雷达数据建筑物变化检测方法-汪承义(2013) 背景:空间分辨率的提高引入了“类内可分性”增加与“类间可分性”降低;遮挡与阴影的存在使问题变得…...
使用QT C++编写一个随机生成网络ip地址的程序
根据网络搜索结果,使用QT C编写一个随机生成网络ip地址的程序的示例代码可能如下: cpp #include <QCoreApplication> #include <QRandomGenerator> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(a…...
Web前端学习:章三 -- JavaScript预热(三)
六九:函数的变量提升 函数的变量提升没有var高,var是最高的。 先提var,再提函数 解析: 1、4行打印之前没有定义变量,预解析触发变量提升 2、先提var,再提函数。所以先把var提升到最上面,然后提…...
java实用小技巧:判断list是否有重复项
在项目中经常会遇到这样的场景,就是一个list,根据某种规则,我要去判断里面是不是有重复的项。 难度不高,但有点烦,所以专门开一篇文章来记录一下,争取弄一个相对简洁的写法。 先看一个简单的例子…...
SQL优化常用招数(上)
文章目录 一、查询SQL尽量不要使用select *,而是具体字段二、避免在where子句中使用 or 来连接条件三、尽量使用数值替代字符串类型四、使用varchar代替char五、技术延伸,char与varchar2的区别?六、where中使用默认值代替null七、避免在where子句中使用!=或<>操作符八…...
C++并发之探索编程三
文章目录1. 等待事件或等待其他条件1.1 凭借条件变量等待条件成立1.1.1 std::condition_variable1.1.2 std::condition_variable_any1.1.3 std::condition_variable和std::condition_variable_any之间的区别上个章节我们讨论了如何对共享数据的一个保护,通过std::lo…...
某智能驾驶企业:CACTER云网关为O365系统护航
01 客户背景 某智能驾驶企业是一家国际性的高科技创新型企业,在智能驾驶领域处于全球领先地位,专注于为广大客户提供个性化的智能驾驶解决方案,共建美好智能新时代。 使用产品:CACTER邮件安全云网关 02 痛点难点问题 根据Corema…...
网络安全与信息安全的主要区别讲解-行云管家
生活中工作中,我们经常可以听到信息安全与网络安全这两个词语,但很多小伙伴对于两者区分不清楚,今天我们小编就给大家来简单讲解一下这两者的主要区别吧! 网络安全与信息安全的主要区别讲解 1、定义不同 网络安全是指网络系统的…...
Zabbix6.2利用模板和自定义监控项监控华为AR3260路由器
1:登录路由器的WEB管理控制台。在系统管理中找到SNMP然后开启SNMP代理,SNMP的版本可以只选择v2c都选择也无所谓,然后点击新建一个团体。 2:团体名称输入默认的public即可,在WEB端显示的是乱码,但是不影响使…...
MySQL Connector/C++使用过程中的问题
Linux环境下,使用mysql connector cpp的时候,链接的时候报错: /usr/bin/ld: warning: libssl.so.10, needed by /usr/lib64/libssh2.so.1, may conflict with libssl.so.1.1 /usr/bin/ld: ext/openssl/.libs/xp_ssl.o: undefined reference …...
SpringBoot下的Spring——DAY04——动态代理总结、AOP、自定义注解进行拦截、动态获取注解参数、通知方法(内含源代码)
SpringBoot下的Spring——DAY04——动态代理总结、AOP、自定义注解进行拦截、动态获取注解参数、通知方法(内含源代码) 源代码下载链接地址:https://download.csdn.net/download/weixin_46411355/87549575 目录SpringBoot下的Spring——DAY0…...
Spark MLlib概述
Spark MLlib概述机器学习房价预测模型选型数据探索数据提取准备训练样本模型训练模型效果评估机器学习 机器学习的过程 : 基于历史数据,机器会根据一定的算法,尝试从历史数据中挖掘并捕捉出一般规律再把找到的规律应用到新产生的数据中,从而…...
Git 命令行5步解决冲突方法(亲测有效)
总体步骤如下: git pull --rebase 解决冲突文件 file1.c。git add file1.cgit commit -m "*****" git pushgit rebase --continue ,此时冲突消失强推,git push origin xxxx -f 本人解决的例子如下: 第一步、拉取…...
在线帮助文档——让用户更方便地获取帮助
在当今互联网时代,人们在使用各种产品或服务时,难免会遇到问题或疑问,需要寻求帮助。而在线帮助文档则成为了一种方便、快捷、高效的解决问题的方式。Baklib作为一款优雅的云知识库构建平台,可以帮助公司在线制作各种类型的帮助文…...
一小时轻松掌握Git,看这一篇就足够
文章目录序言:版本控制分类一、Git环境配置下载卸载安装二、常用linux命令三、基本配置四、Git基本操作0.原理图1.项目创建及克隆方式一:本地仓库搭建方式二:克隆远程仓库2.文件操作3.配置ssh公钥4.分支5.push代码参考序言:版本控…...
spring cloud stream 自定义binder
背景xxx,关键字 binder stream ,解决多中间件通信及切换问题直接主菜:spring cloud stream 架构中间件 --- binder --- channel --- sink --- (处理)---source ---channel ---binder ---中间件 springcloudstream已自己集成了kafk…...
计算机网络之HTTP协议
目录 一、HTTP的含义 1.1 理解超文本 1.2 理解应用层协议 1.3 理解HTTP协议的工作过程 二、HTTP协议格式 2.1 抓包工具的使用 2.2 理解协议格式 2.2.1 请求协议格式 2.2.2. 响应格式请求 一、HTTP的含义 HTTP(全称为“超文本传输协议”)&#x…...
如何挖掘专利创新点?
“无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。” 对于广大的软件工程师来说…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
