Logo 逆向知识库

bash

Bash 是最好的语言(确信)

变量魔法#

str="HelloWorld"
> echo ${str:2:4} # 变量切分,从 2 开始,切 4 个字符
lloW 
> echo ${#str} # 获取变量长度
10
echo ${str/[eo]/X} # 正则替换,只替换一次
HXlloWorld
> echo ${str//[eo]/X} # 双斜杠,替换所有
HXllXWXrld

user="${1:-nick}" # 假如 $1 是空的,就赋值为 nick

 

统计字数#

some work | wc -m # -m 是统计字符数,默认为字节数,可以 man 或者 -<TAB> 查看所有选项

 

脚本之间参数的传递#

#/usr/bin/bash
echo "\$@ (无括号)每个参数按照 IFS 拆分:"
for arg in $@; do echo "[$arg]"; done

echo
echo "\"\$@\" (有括号)每个参数作为独立元素传递:"
for arg in "$@"; do echo "[$arg]"; done

echo
echo "\$* (无括号)和 \$@ 一样:"
for arg in $*; do echo "[$arg]"; done

echo
echo "\"\$*\" (有括号)所有参数都当作一个整体:"
for arg in "$*"; do echo "[$arg]"; done

结果:

> ./1.sh "Hello World" --check
$@ (无括号)每个参数按照 IFS 拆分:
[Hello]
[World]
[--check]

"$@" (有括号)每个参数作为独立元素传递:
[Hello World]
[--check]

$* (无括号)和 $@ 一样:
[Hello]
[World]
[--check]

"$*" (有括号)所有参数都当作一个整体:
[Hello World --check]

 

信号处理#

trap '命令' 信号名

 

错误就退出#

set -e

 

重扫PATH(zsh 特有)#

rehash

 

进程替代 >() <()#

>() 是输出到一个 fd 中,例如:

> echo hi | tee >(cat) >(cat) >/dev/null
hi
hi
> echo hi > >(cat) > >(cat)
hi
hi