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…...
如何挖掘专利创新点?
“无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。” 对于广大的软件工程师来说…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...
从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...
加密通信 + 行为分析:运营商行业安全防御体系重构
在数字经济蓬勃发展的时代,运营商作为信息通信网络的核心枢纽,承载着海量用户数据与关键业务传输,其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级,传统安全防护体系逐渐暴露出局限性&a…...
数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...
