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…...
如何挖掘专利创新点?
“无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。” 对于广大的软件工程师来说…...
Battle City碰撞检测算法:精准命中与躲避的核心技术解析
Battle City碰撞检测算法:精准命中与躲避的核心技术解析 【免费下载链接】battle-city 🎮 Battle city remake built with react. 项目地址: https://gitcode.com/gh_mirrors/ba/battle-city 在经典的Battle City坦克大战游戏中,碰撞检…...
DuckyClaw工具链解析:智能家居硬件安全与固件提取实战
1. 项目概述:从“DuckyClaw”看智能家居的硬件安全研究最近在翻看一些开源硬件项目时,一个名为“DuckyClaw”的仓库引起了我的注意。这个项目托管在涂鸦智能(Tuya)的官方GitHub组织下,名字本身就很有意思——“鸭子爪”…...
观察在虚拟机内使用Taotoken调用API的延迟与稳定性表现
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察在虚拟机内使用Taotoken调用API的延迟与稳定性表现 在开发与测试环境中,虚拟机(VM)是常见的…...
3步轻松搞定:BiliBili-UWP第三方客户端完整使用指南
3步轻松搞定:BiliBili-UWP第三方客户端完整使用指南 【免费下载链接】BiliBili-UWP BiliBili的UWP客户端,当然,是第三方的了 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBili-UWP 还在用浏览器看B站吗?卡顿、高内存…...
设计系统文本化:用YAML/JSON统一管理设计令牌,实现多端一致与自动化
1. 项目概述:当设计系统遇上纯文本 最近在跟一个跨职能团队协作时,我们遇到了一个典型的老大难问题:设计师在Figma里更新了一个按钮的主色调,前端工程师在代码库里改了对应的CSS变量,但负责撰写产品文档和营销材料的同…...
2026年三款最值得在线预约小程序,解决您的预约难题
本文围绕在线预约小程序这一核心主题展开,系统梳理了2026年主流平台的特性与差异。内容涵盖微信、支付宝、抖音三大平台的功能对比、适用场景及操作流程解析,并结合实际案例深度剖析技术实现原理。同时提供选型指南与实操建议,帮助用户根据业…...
告别调参玄学:深入解读Frenet轨迹规划中评价函数权重(K_J, K_T, K_D)到底怎么设
Frenet轨迹规划中评价函数权重的科学调参方法论 在自动驾驶系统的开发过程中,轨迹规划算法的调参工作常常被工程师们戏称为"玄学实验"。这种现象在Frenet坐标系下的动态轨迹规划中尤为明显——当面对K_J、K_T、K_D等一系评价函数权重参数时,不…...
Win10+Ubuntu双系统避坑指南:从Legacy到UEFI启动模式切换的完整流程
Win10Ubuntu双系统避坑指南:从Legacy到UEFI启动模式切换的完整流程 每次看到朋友在双系统安装过程中反复重启、对着报错界面抓耳挠腮的样子,我都会想起自己第一次尝试时连续报废三块硬盘的惨痛经历。特别是当Windows 10已经以Legacy模式安装在MBR磁盘上&…...
OpenClaw机械爪MuJoCo仿真沙盒:从算法验证到仿真到现实迁移
1. 项目概述:一个为开源机械爪打造的“数字沙盘”如果你对机器人、开源硬件或者DIY自动化项目感兴趣,最近可能听说过“OpenClaw”这个名字。它是一款设计精巧、成本可控的开源机械爪,社区里不少爱好者都在用它来搭建自己的机器人手臂或者自动…...
别再让FTP匿名登录成后门!手把手教你加固vsftpd服务(附CentOS 7实战配置)
企业级vsftpd安全加固实战指南:从匿名登录风险到全方位防护 FTP服务作为企业文件传输的经典解决方案,至今仍在许多组织的IT架构中扮演重要角色。然而,默认配置下的vsftpd服务往往隐藏着致命的安全隐患——匿名登录功能如同一扇未上锁的后门&a…...
