shell两个时间字符串插值_Shell 脚本速成
0x00 前言
这段时间快速把 Micropoor 的内网课程看完了一遍,里面出现了很多 Shell 脚本。
Shell 脚本有什么好处?
无需安装其他软件
适合任务自动化,擅长系统管理任务
通过 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
注: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
上面的脚本更 shellish
的写法是:
#!/bin/bash
for var in `seq 3`; do
echo "var is $var"
done
注意通过上面通过两个「`」引入了命令,直接使用命令执行的结果。
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
注意:
[
后和]
前要空格。参考:“[0: command not found” in Bash [duplicate]lt
即为less than
,小于。
0x05 if 语句
语法:
if ....; then
....
elif ....; then
....
else
....
fi
$SHELL 变量:
注意:上面的 SHELL 必须大写。变量 $SHELL 包含了登录 shell 的名称。
#!/bin/sh
if [ "$SHELL" = "/bin/bash" ]; then
echo "bash"
else
echo "your login shell is $SHELL"
fi
注:再次注意 []
前后的空格问题。不然结果可能出错。
0x06 函数
函数的主要使用场景是代码复用。函数定义部分应该写在一个 Shell 脚本的开头。
# 定义
functionName()
{
body
}
# 调用
functionName
无返回值函数:
#!/bin/bash
firstFunction(){
echo "1 try!"
}
firstFunction
有返回值函数:
注:read var
命令:提示用户输入,并将输入内容赋值给变量 var
#!/bin/bash
funWithReturn(){
echo "这个函数会对输入的两个数字进行相加运算..."
echo "输入第一个数字: "
read aNum
echo "输入第二个数字: "
read anotherNum
echo "两个数字分别为 $aNum 和 $anotherNum !"
return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"
函数返回值在调用该函数后通过 $?
来获得。注意:$?
仅对其上一条指令负责,一旦函数返回后其返回值没有立即保存入参数,那么其返回值将不再能通过 $?
获得。
注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至 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
注意,$10
不能获取第十个参数,获取第十个参数需要 ${10}
。当 n >=10 时,需要使用 ${n}
来获取参数。
另外,还有几个特殊字符用来处理参数:
0x07 后记
先学这么多,就基本具备了写简单的 Shell 脚本的能力以及读懂别人的 shell 脚本的能力。
其实 Shell 脚本并不难,无非是多条 Linux 命令合到一起,加了一些控制语句、条件控制、变量等。
Shell 脚本语法坑多,以后想必会遇到不少问题。剩下的语法,也在实践中慢慢补充。
本文来自作者Snowming,文章仅供学习研究网络安全,不可用于非法用途,因为该文章而触犯中华人民共和国法律的,一切后果自己负责,作者和平台不承担任何责任。
shell两个时间字符串插值_Shell 脚本速成相关推荐
- java 时间字符串比较大小_java中如何比较两个时间字符串的大小
思路: 先都转换成日期.然后再用毫秒数进行比较. 下面是简单的例子: function tab(date1,date2){ var oDate1 = new Date(date1); var oDat ...
- shell 脚本比较字符串相等_shell脚本--逻辑判断与字符串比较
涉及到比较和判断的时候,要注意 整数比较使用-lt,-gt,ge等比较运算符,详情参考:整数比较 文件测试使用 -d, -f, -x等运算发,详情参考:文件测试 逻辑判断使用 && ...
- shell学习之-sed用法解析_Shell脚本之sed的使用
1.sed命令:主要作用是查找:新增 删除 和修改替换. user.txt daokr#cat user.txt ID Name Sex Age zhang M 19 wang G 20 cheng ...
- 比较两个时间字符串的大小
现在有两个字符串,是从表单读取来的日期性,"2003-10-12"与"2003-10-21", 现在如何判断他们的大小. 如果不想再转为date类型比较 有一种 ...
- shell不允许输入空字符_shell脚本编程之控制脚本
点蓝色字关注"CurryCoder的程序人生" 微信公众号:CurryCoder的程序人生 欢迎关注我,一起学习,一起进步! 1.引言 目前为止,运行脚本的唯一方式是以实时模式在命 ...
- 用shell将时间字符串与时间戳互转
http://www.codelast.com/?p=775 在shell中,字符串转换为时间戳可以这样做: 1 date -d "2010-10-18 00:00:00" +%s ...
- shell sleep毫秒_Shell脚本之date、sleep、usleep命令
1.1 date命令 date用于获取和设置操作系统的时间,还有hwclock是获取硬件时间. date有个选项"-d",可以用来描述获取什么时候的时间,描述的方式非常开放,但不能 ...
- shell编程范例之字符串操作[转]
shell编程范例之字符串操作 下面是"在线新华字典"的解释: 字符串: 简称"串".有限字符的序列.数据元素为字符的线性表,是一种数据的逻辑结构.在计算机中可 ...
- Linux 命令行与shell编程 第10章 构建基本脚本
本章内容 构建基本脚本 使用多个命令 创建shell脚本文件 现在我们已经介绍了Linux系统和命令行的基础知识,可以开始编程了.本章讨论编写shell脚本的基础知识.在开始编写自己的shell脚本大 ...
最新文章
- 使用selenium设置firefox不加载图片增加加载速度提高爬虫效率
- 在vs2012中用C#开发Android应用Xamarin环境搭建
- Sentinel 连接数据源
- C#完整的通信代码(点对点,点对多,同步,异步,UDP,TCP),多多宜善
- 20200225:最小路径和(leetcode64)
- 网络安全:教你五招服务器安全维护技巧
- php去掉文字空白换行,php去掉空格换行的方法
- java反射机制原理详解
- Android零基础入门第18节:EditText的属性和使用方法
- dwg格式转换pdf
- 软考软件设计师中级考试知识点(一)
- 编写MTK6737平台的GPIO驱动例程(一)
- mongodb时间差8小时,原因及解决方案
- 关于手册的页码和有效页清单 - LEP
- 基于android的校友帮平台系统
- win10升级win11操作
- 手机移动端首页广告栏滚动图片
- 鹰眸安全帽识别系统对施工现场管理水平的提升
- 迈入发展期的信创,更需夯实基础
- 青龙面板+Ninja的企业微信通知设置以及企业微信群消息转到微信方法