shell两个时间字符串插值_Shell 脚本速成

0x00 前言

这段时间快速把 Micropoor 的内网课程看完了一遍,里面出现了很多 Shell 脚本。

Shell 脚本有什么好处?

  1. 无需安装其他软件

  2. 适合任务自动化,擅长系统管理任务

通过 Shell 编程,大大提高渗透效率。

0x01 第一个 shell 脚本

功能:启动 msfconsole

vim start_msf.sh

chmod +x start_msf.sh

# 运行

./start_msf.sh

start_msf.sh 的具体内容:

#!/bin/sh

msfconsole

0x02 引入变量

功能:输出一个变量名

touch test.sh

chmod +x test.sh

# 运行

./test.sh

test.sh 的具体内容:

#!/bin/sh

name='变量名'

echo $name

注意:=前后不能有空格,否则就会出现 ./test.sh: 2: name: not found这个错误,也就是说变量定义会失败。

有时候变量名可能会和其它文字混淆,如下代码:

#!/bin/sh

num=2

echo "this is the $numnd"

上述脚本并不会输出 this is the 2nd,只会打印 this is the;这是由于 shell 会去搜索变量 numnd 的值,而实际上这个变量此时并没有值。

修改方法:用花括号圈定变量名:

#!/bin/sh

# 这是一个注释

num=2

echo "this is the ${num}nd"

注意 shell 脚本的注释是 #

0x03 for 循环

for var in ….; do …. done

#!/bin/sh

for var in A B C; do

echo "var is $var"

done

0599c1560e4d4cea191273a79778dcab.png

注:sh 不支持 C 语言风格的 for 循环写法,所以下面的脚本一定要把 shell 指定为 bash。参考:shell脚本:Syntax error: Bad for loop variable错误解决方法

#!/bin/bash

for ((var=0;var<=3;var++)); do

echo "var is $var"

done

680b1e17e189889c0ca68b11c8b9912d.png

上面的脚本更 shellish 的写法是:

#!/bin/bash

for var in `seq 3`; do

echo "var is $var"

done

b5783295990dc01f641db1e705f4937a.png

注意通过上面通过两个「`」引入了命令,直接使用命令执行的结果。

0x04 while 循环

语法:

while condition

do

command

done

测试命令

可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等…

通常用[]来表示条件测试,注意这里的空格很重要,要确保方括号前后的空格。

  • [ -f "somefile" ]:判断是否是一个文件

  • [ -x "/bin/ls" ]:判断/bin/ls是否存在并有可执行权限

  • [ -n "$var" ]:判断$var变量是否有值

  • [ "$a" = "$b" ]:判断$a$b是否相等

示例代码:

#!/bin/bash

COUNTER=0

while [ $COUNTER -lt 5 ]

do

COUNTER=$((COUNTER + 1))

echo $COUNTER

done

ddf77b4ecdf56e3322cb5cac459d7345.png

注意:

  1. [ 后和 ] 前要空格。参考:“[0: command not found” in Bash [duplicate]

  2. lt 即为 less than,小于。

0x05 if 语句

语法:

if ....; then

....

elif ....; then

....

else

....

fi

$SHELL 变量:

bb5f397e979705e90fb83ba1b577e8f5.png

注意:上面的 SHELL 必须大写。变量 $SHELL 包含了登录 shell 的名称。

#!/bin/sh

if [ "$SHELL" = "/bin/bash" ]; then

echo "bash"

else

echo "your login shell is $SHELL"

fi

94572c543653f88808f79647661109a2.png

注:再次注意 [] 前后的空格问题。不然结果可能出错。

0x06 函数

函数的主要使用场景是代码复用。函数定义部分应该写在一个 Shell 脚本的开头。

# 定义

functionName()

{

body

}

# 调用

functionName

无返回值函数:

#!/bin/bash

firstFunction(){

echo "1 try!"

}

firstFunction

cda05057fc09986fe7a99840c359c4e4.png

有返回值函数:

注:read var 命令:提示用户输入,并将输入内容赋值给变量 var

#!/bin/bash

funWithReturn(){

echo "这个函数会对输入的两个数字进行相加运算..."

echo "输入第一个数字: "

read aNum

echo "输入第二个数字: "

read anotherNum

echo "两个数字分别为 $aNum 和 $anotherNum !"

return $(($aNum+$anotherNum))

}

funWithReturn

echo "输入的两个数字之和为 $? !"

5b4d0e24524a12b762b1eaf0dc2f778a.png

函数返回值在调用该函数后通过 $? 来获得。注意:$? 仅对其上一条指令负责,一旦函数返回后其返回值没有立即保存入参数,那么其返回值将不再能通过 $? 获得。

注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至 shell 解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。

函数传参

在 Shell 脚本中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数……当 n >=10 时,需要使用 ${n} 来获取参数。

带参数的函数示例:

#!/bin/bash

# author:Snowming

funWithParam(){

echo "第一个参数为 $1 !"

echo "第二个参数为 $2 !"

echo "第十个参数为 $10 !"

echo "第十个参数为 ${10} !"

echo "第十一个参数为 ${11} !"

echo "参数总数有 $# 个!"

echo "作为一个字符串输出所有参数 $* !"

}

funWithParam 1 2 3 4 5 6 7 8 9 34 73

1d6e7f6121606d3990d5f652e80cffdf.png

注意,$10 不能获取第十个参数,获取第十个参数需要 ${10}。当 n >=10 时,需要使用 ${n} 来获取参数。

另外,还有几个特殊字符用来处理参数:

5d1a50e9dbd70ba52865baa6763dcba2.png

0x07 后记

先学这么多,就基本具备了写简单的 Shell 脚本的能力以及读懂别人的 shell 脚本的能力。

其实 Shell 脚本并不难,无非是多条 Linux 命令合到一起,加了一些控制语句、条件控制、变量等。

Shell 脚本语法坑多,以后想必会遇到不少问题。剩下的语法,也在实践中慢慢补充。

本文来自作者Snowming,文章仅供学习研究网络安全,不可用于非法用途,因为该文章而触犯中华人民共和国法律的,一切后果自己负责,作者和平台不承担任何责任。

5430b43e3d4fcff42fffd0aeab37954e.png

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

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

相关文章

Quick Audience组织和工作空间功能解读

近期&#xff0c;Quick Audience完成了权限系统全面升级&#xff0c;可以解决集团企业不同品牌、不同运营组织&#xff0c;不同消费者运营的诉求&#xff0c;精细化保障企业数据访问安全&#xff0c;提升管控的灵活度。 Quick Audience整个系统分为组织管理和工作空间两层。一个…

mac安装python环境教程_python mac下安装虚拟环境的图文教程

Mac 下 Flask 框架 workon命令找不到 ---- 最终解决方案&#xff08;详解具体实现操作过程中遇到的坑&#xff09;2018年08月17日 00:02:05Jasonmes阅读数&#xff1a;622 Mac 下 Flask 的 全网最详细搭建1.安装virtualenv和virtualenvwrapper sudo pip install virtualenv# 以…

数据智能构建管理平台Dataphin V2.9.4.3版本发布

简介&#xff1a; Dataphin发布V2.9.4.3版本升级多项产品能力&#xff0c;该版本在产品功能和用户体验上都进行了优化和提升&#xff0c;旨在为用户提供更完善的产品能力和体验&#xff0c;以加速企业数据中台建设进程。 1 产品简介 Dataphin是阿里巴巴集团OneData数据治理方…

host文件注释 ubuntu_Redis and MongoDB 设置密码验证(scrapy)(win)(ubuntu)

1 . Rediswin101.找到 redis.windows.conf ,对其进行编辑。将 # requirepass foobared 更改为 requirepass yourpassword 2.重新启动 redis-server 服务,如: redis-server redis.windows.conf (以redis.windows.conf为配置启动redis-server)ubuntu1.ubuntu下Redis的配置文件为…

阿里云罗小飞:阿里云边缘云,从资源到场景的产品演进

2021年7月1日&#xff0c;以“云集影从&#xff0c;融网聚生”为主题的GIDC全球互联网数据大会在上海成功举行。本次大会由中国信通院指导&#xff0c;艾迪网主办&#xff0c;邀请来自政府、产业等多领域的专家&#xff0c;围绕“新基建”、“绿色数据中心”、“云网协同”、“…

乾通嗖嗖抢先布局多元化用工 实现全流程数智化人力管理

12月9日&#xff0c;乾通互连战略升级暨乾通嗖嗖媒体发布会在北京举行。在发布会上&#xff0c;乾通互连对外宣布组织架构再升级&#xff0c;未来将围绕薪酬社保福利及多元化用工两大业务板块进行战略布局&#xff0c;推出多元化用工解决方案——乾通嗖嗖。 乾通嗖嗖通过线上多…

那些年,我们一起做过的性能优化

简介&#xff1a; 性能优化是一个体系化、整体性的事情&#xff0c;印刻在项目开发环节的各个细节中&#xff0c;也是体现技术深度的大的战场。文章以Quick BI的复杂系统为背景&#xff0c;详细介绍性能优化的思路和手段&#xff0c;以及体系化的思考。 一直以来&#xff0c;性…

中继承父类实现父类方法的快捷键_关于封装、继承

在初期&#xff0c;很多人对于java中一些定义的认识比较模糊&#xff0c;今天我就来详细讲一讲我所认识的封装和继承。1、封装1.1&#xff09;概念&#xff1a;将类的某些信息隐藏在内部&#xff0c;不允许外部程序直接访问&#xff0c;而是通过该类提供的方法来实现对隐藏信息…

KubeVela 上手(1)|让云端应用交付更加丝滑

简介&#xff1a; KubeVela 是阿里云和微软共同发起的 OAM&#xff08;Open Application Model&#xff09;标准的技术实现&#xff0c;旨在打造统一、标准、跨环境的云端应用交付&#xff0c;省时省力&#xff0c;轻松简单 作者&#xff5c;KubeVela 社区 本文适合所有软件工…

华为云云原生首次在太空验证,提升“天算星座“卫星计算精度

12月10日&#xff0c;搭载“天算星座”计算平台的试验卫星在轨稳定运行&#xff0c;华为云“云边一体”方案首次在太空验证。 图&#xff1a;天算星座计划 “天算星座”计划&#xff0c;由北京邮电大学深圳研究生院与天仪研究院共同发起&#xff0c;以服务国家重大战略需求和…

火柴人_火柴人战争遗产修改无限金币钻石

火柴人战争遗产修改无限金币钻石V1.11.160/中文/80M商店内使用钻石购买商品不减反增【一、游戏简介】《火柴人战争遗产修改版 Stick War: Legacy》一直最受玩家欢迎、评分最高的一款网游现在推出移动版.玩 Stick War&#xff0c;体验这款最受欢迎、最有趣、最具挑战性且容易入迷…

一种通用整形数组压缩方法

简介&#xff1a; 我们在开发中后台应用或者中间件的时候&#xff0c;会存储一些数据在内存中以加快访问速度。随着数据量的增加&#xff0c;除了可以放置于堆外&#xff0c;还可以通过实时压缩来缓解。今天就给大家介绍一种压缩整形数组的方式。 作者 | 玄胤 来源 | 阿里技术公…

gitlab git clone 卡住_gitlab从入门到绝望

啥年月了还用svn&#xff0c;日了狗一样难受。开搞&#xff01;docker是最好的容器&#xff0c;直接docker装gitlab。学新玩意不去官网不是人&#xff1a;https://docs.gitlab.com/omnibus/docker/#expose-gitlab-on-different-portsdocker pull gitlab/gitlab-cesudo docker r…

FBEC2021暨第六届金陀螺奖颁奖典礼盛大开幕

2021年12月10日&#xff0c;由广东省游戏产业协会、广东省虚拟现实产业技术创新联盟、深圳市科学技术协会、深圳市互联网文化市场协会指导&#xff0c;陀螺科技主办&#xff0c;深圳市科技开发交流中心、恒悦创客魔方协办&#xff0c;行业头部媒体游戏陀螺、VR陀螺、陀螺电竞、…

RDS PostgreSQL一键大版本升级技术解密

简介&#xff1a; 内容简要&#xff1a; 一、PostgreSQL行业位置 二、PostgreSQL版本升级背景 三、PostgreSQL版本升级解密 四、PostgreSQL版本升级成果 一、PostgreSQL行业位置 &#xff08;一&#xff09;行业位置 在讨论PostgreSQL&#xff08;下面简称为PG&#xff09;在…

环境变量_Jenkins流水线环境变量权威指南

你是否遇到过因环境变量问题导致调试流水线很长时间&#xff1f;这篇文章一定能解决你的问题。本文章翻译自博客。欢迎来到“Jenkins CookBook”系列的第一篇博客文章。今天&#xff0c;我们专注于有效地使用Jenkins Pipeline环境变量。您将学习如何定义env变量&#xff0c;如何…

浅谈RSocket与响应式编程

简介&#xff1a; RSocket是高效一个二进制的网络通讯协议&#xff0c;能够满足很多场景下使用。另外&#xff0c;RSocket也是一个激进的响应式捍卫者&#xff0c;激进到连API都跟响应式无缝集成。本文我们将和大家分享RSocket与响应式编程。 作者 | 素渡 来源 | 阿里技术公众号…

Go语言重新开始,Go Modules 的前世今生与基本使用

随着Go语言发展与场景变化&#xff0c; GOPATH 引起的编译依赖、内部自签发证书、安全审计等问题相继出现&#xff0c;随着官方推出的Go Modules逐渐完善&#xff0c;用户有了新的选择。本文将会带领大家从0开始&#xff0c;认识并使用Go Modules。 2020 年腾讯内部的一份开发者…

MaxCompute中如何通过logview诊断慢作业

简介&#xff1a; MaxCompute致力于批量结构化数据的存储和计算&#xff0c;提供海量数据仓库的解决方案及分析建模服务&#xff0c;在MaxCompute执行sql任务的时候有时候作业会很慢&#xff0c;本文通过查看logview排查具体任务慢的原因 在这里把任务跑的慢的问题划分为以下几…

excel超级工具箱_这6个Excel高效办公插件,你都用过吗?

1.易用宝。ExcelHome出品&#xff0c;永久免费&#xff0c;让繁琐或难以实现的操作变得简单可行&#xff0c;甚至能够一键完成&#xff0c;所有这些功能都将极大地提升 Excel 的便捷以及可用性&#xff01;地址&#xff1a;http://yyb.excelhome.net2.方方格子工具箱。大部分功…