ShellCode
shell/
├── controlFlow
- if
- case
- for
- while
├── function
- 函数
├── list
- 数组
├── params
- 参数
- 变量
- 运算符
├── redirection
- 重定向
└── text
- grep
- awk
- sed
[toc]
#!/usr/bin/env bash
#!/bin/bash
- 变量
小写, 赋值=左右没有空格
list=(1 2 3 4)
引用 ${#list[@]}
- 函数
# 首字母大写,驼峰式
function Remove(){
echo "Remove"
}
# 显式的写出 function 定义函数
# 局部变量使用 local
- 环境变量
大写
- 常量
readonly USER
内置命令使用下文的两种方式。
`type mkdir`
$(type mkdir) // 建议使用这种, 可以执行命令且可以将结果赋值给变量
使用双 []
号
if [[ -e a ]]; then
echo ""
fi
变量 | 含义 |
---|---|
$0 | 当前脚本的文件名 |
$n | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。 |
$# | 传递给脚本或函数的参数个数。 |
$* | 传递给脚本或函数的所有参数。 |
$@ | 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同。 |
$? | 上个命令的退出状态,或函数的返回值。 |
$$ | 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。 |
数值判断
运算符 | 描述 | 示例 |
---|---|---|
-eq | 等于 | [ 3 -eq $mynum ] |
-ne | 不等于 | |
-lt | 小于 | |
-le | 小于或等于 | |
-gt | 大于 | |
-ge | 大于或等于 |
字符串判断
运算符 | 描述 | 示例 |
---|---|---|
-z | string 长度为零,则为真 | [ -z "$myvar" ] |
-n | string 长度非零,则为真 | |
= | string1 与 string2 相同,则为真 | |
!= | string1 与 string2 不同,则为真 | [ "$myvar" != "one two three" ] |
文件/文件夹(目录)判断
运算符 | 描述 | 示例 |
---|---|---|
-e | filename存在,则为真 | [ -e /var/log/syslog ] |
-d | filename为目录,则为真 | [ -d /tmp/mydir ] |
-f | filename为常规文件,则为真 | |
-L | filename可读,则为真 | |
-r | filename可读,则为真 | |
-w | filename可写,则为真 | |
-x | filename可执行,则为真 | |
-nt | filename1 比 filename2新,则为真 | [ /boot/bzImage -nt arch/i386/boot/bzImage ] |
-ot | filename1 比 filename2旧,则为真 |
逻辑判断
运算符 | 描述 | 示例 |
---|---|---|
-a | 与 | |
-o | 或 | |
! | 非 |
例子1:如果a>b且a<c
if (( a > b )) && (( a < c ))
#或者
if [[ $a > $b ]] && [[ $a < $c ]]
#或者
if [ $a -gt $b -a $a -lt $c ]
例子2:如果a>b或a<c
if (( a > b )) || (( a < c ))
#或者
if [[ $a > $b ]] || [[ $a < $c ]]
#或者
if [ $a -gt $b -o $a -lt $c ]
例子3:逻辑判断
#!/usr/bin/env bash
var1="1"
var2="2"
if test $var1 = "1" -a $var2 = "2" ; then
echo "equal"
fi
if test $var1 != "1" -o $var2 != "3" ; then
echo "not equal"
fi
if ! test $var1 != "1"; then
echo "not 1"
fi
[], test, [[]], (()), let
-
"["是一条命令, 与test等价,在命令行里test expr和[ expr ]的效果相同。
-
"[[]]"是关键字, 相比与"[]"支持数字运算;支持字符串的模式匹配,如
[[ hello == hell? ]]
为真;逻辑组合可以不使用test的-a,-o而使用&& ||; -
let和(()),基本上是一样的,主要进行算术运算,也比较适合进行整数比较,可以直接使用熟悉的<,>等比较运算符,其中运算时可以直接使用变量名而不需要加$符号;