BASH SHELL cheat sheet
记录一些bash shell脚本的奇技淫巧,都是从实际使用中google的。bash各Linux发行版都自带方便好用特别是文本处理、一些运维之类的小脚本,但有些语法繁琐不好记容易忘整理一下方便查找。
trap
trap命令用于指定在接收到信号后将要采取的动作,常见的用途是在脚本程序被中断时完成清理工作。当shell接收到sigspec指定的信号时,arg参数(命令)将会被读取,并被执行。例如:
trap "exit 1" HUP INT PIPE QUIT TERM
表示当shell收到HUP,INT,PIPE,QUIT,TERM
这几个信号时,当前执行的程序会读取参数"exit 1"
,并将它作为命令执行。
如果要忽略某个信号就参数使用单引号就可以''
trap '' signals
如果启动的时候忽略了信号比如使用了nohup
,trap命令是无效的。具体信号可使用man 7 signal
或者kill -l
查阅
$*
、$@
、$#
直接上例子看,如下脚本test.sh
echo 参数总个数 \$#: $#
echo 第0个参数 \$0: $0
for a in $(seq 1 $#); do
eval b=\$$a
echo 第"$a"个参数 \$"$a": $b
done
echo -e "\nUsing \"\$#\":"
echo "$#"
echo -e "\nUsing \$#:"
echo $#
echo -e "\nUsing \"\$*\":"
for a in "$*"; do
echo $a;
done
echo -e "\nUsing \$*:"
for a in $*; do
echo $a;
done
echo -e "\nUsing \"\$@\":"
for a in "$@"; do
echo $a;
done
echo -e "\nUsing \$@:"
for a in $@; do
echo $a;
done
然后运行此脚本,注意最后3 4
用了双引号
bash test.sh 1 2 "3 4"
结果如下
❯ bash test.sh 1 2 "3 4"
参数总个数 $#: 3
第0个参数 $0: test.sh
第1个参数 $1: 1
第2个参数 $2: 2
第3个参数 $3: 3 4
Using "$#":
3
Using $#:
3
Using "$*":
1 2 3 4
Using $*:
1
2
3
4
Using "$@":
1
2
3 4
Using $@:
1
2
3
4
$#
是命令的参数总数,不算$0
所以是3,加不加引号效果一样。
然后$*
和$@
总结一下就是,在没有双引号的情况下$*
和$@
效果一样,加上了双引号$*
会把参数当成一串字符串一次性处理,$@
加双引号会以空格分隔成列表一般也是我们需要的效果。
$!
$!
代表最近在后台执行的进程pid
❯ nohup sleep 10 > /dev/null 2>&1 &
[1] 79627
❯ echo $!
79712
可以配合wait
命令一起使用,等待任务结束
❯ nohup sleep 30 > /dev/null 2>&1 &
❯ recent_pid=$!
❯ # do some else ...
❯ wait $recent_pid # wait for complete finish
❯ echo $? # check status
0
计算单词数
可以使用wc -w
计算,如
wc -w <<< "a b c" # 3
read
命令
从标准输入(std input)读取一行
while read -r line;
do
echo "> $line <"
done
从管道读取内容到变量
如下面为./run.sh
文件
INPUT=$(</dev/stdin)
echo "$INPUT"
然后echo hello world | ./run.sh
,其中INPUT
变量就是输入内容
fd命令
取代find
ack/ag/rg命令
ack
和ag
命令是高级版本的grep
,ack
使用Perl编写更能发挥正则的威力,而ag
是ack
的高性能版,而且加上了.gitignore
搜索速度会更加的快
-
ack --python 'regex'
或者ag --python 'regex'
搜索所有python文件中包含regex,ack默认结果只显示匹配到的内容开头不加行号可以使用
-H
显示ag会默认加上行号,可以使用-l
参数只显示文件名,-c
显示每个文件匹配到次数,-w
只匹配单词 -
ack -g 'regex'
或者ag -g 'regex'
只搜索文件名匹配的,列出文件
-
rg
比ag
还要快,它是用Rust写得。
端口扫描Nmap
-
nmap -p- -v -A -T4 xxx.xxx.xxx.xxx
全范围端口扫描,
-p
指定端口范围,-A -T4
指定探测系统和各端口对应的服务-T4
设定速度但耗时还是会比较长,想要快可以不加参数nmap -v xxx.xxx.xxx.xxx
-
nmap -sT xxx.xxx.xxx.xxx
单独扫描
TCP
端口,可以把-sT
改成-sU
就是单独扫描UDP
协议的 -
nmap -sn 192.168.2.0/24
ping扫描不做端口扫描,上面检测
192.168.2.0/24
网段所有可以ping通的机器,检测有多少机器在线很有用
Reference
https://www.shellscript.sh https://www.computerhope.com https://securitytrails.com
-
暂无评论