|
|
@ -1,6 +1,6 @@
|
|
|
|
##############################################################################
|
|
|
|
##############################################################################
|
|
|
|
# BASH CHEATSHEET (中文速查表) - by skywind (created on 2018/02/14)
|
|
|
|
# BASH CHEATSHEET (中文速查表) - by skywind (created on 2018/02/14)
|
|
|
|
# Version: 8, Last Modified: 2018/02/24 22:06
|
|
|
|
# Version: 9, Last Modified: 2018/02/25 00:24
|
|
|
|
# https://github.com/skywind3000/awesome-cheatsheets
|
|
|
|
# https://github.com/skywind3000/awesome-cheatsheets
|
|
|
|
##############################################################################
|
|
|
|
##############################################################################
|
|
|
|
|
|
|
|
|
|
|
@ -119,6 +119,9 @@ su # 切换到 root 用户
|
|
|
|
su - # 切换到 root 用户并登陆(执行登陆脚本)
|
|
|
|
su - # 切换到 root 用户并登陆(执行登陆脚本)
|
|
|
|
su {user} # 切换到某用户
|
|
|
|
su {user} # 切换到某用户
|
|
|
|
su -{user} # 切换到某用户并登陆(执行登陆脚本)
|
|
|
|
su -{user} # 切换到某用户并登陆(执行登陆脚本)
|
|
|
|
|
|
|
|
id {user} # 查看用户的 uid,gid 以及所属其他用户组
|
|
|
|
|
|
|
|
id -u {user} # 打印用户 uid
|
|
|
|
|
|
|
|
id -g {user} # 打印用户 gid
|
|
|
|
write {user} # 向某用户发送一句消息
|
|
|
|
write {user} # 向某用户发送一句消息
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -227,6 +230,7 @@ declare -F # 查看所有函数,仅显示函数名
|
|
|
|
declare -i # 查看所有整数
|
|
|
|
declare -i # 查看所有整数
|
|
|
|
declare -r # 查看所有只读变量
|
|
|
|
declare -r # 查看所有只读变量
|
|
|
|
declare -x # 查看所有被导出成环境变量的东西
|
|
|
|
declare -x # 查看所有被导出成环境变量的东西
|
|
|
|
|
|
|
|
declare -p varname # 输出变量是怎么定义的(类型+值)
|
|
|
|
|
|
|
|
|
|
|
|
${varname:-word} # 如果变量不为空则返回变量,否则返回 word
|
|
|
|
${varname:-word} # 如果变量不为空则返回变量,否则返回 word
|
|
|
|
${varname:=word} # 如果变量不为空则返回变量,否则赋值成 word 并返回
|
|
|
|
${varname:=word} # 如果变量不为空则返回变量,否则赋值成 word 并返回
|
|
|
@ -256,11 +260,124 @@ text=$(IFS=/; echo "${array[*]}") # 用斜杠链接数组并赋值给变量
|
|
|
|
|
|
|
|
|
|
|
|
num=$((1 + 2)) # 计算 1+2 赋值给 num
|
|
|
|
num=$((1 + 2)) # 计算 1+2 赋值给 num
|
|
|
|
num=$(($num + 1)) # 变量递增
|
|
|
|
num=$(($num + 1)) # 变量递增
|
|
|
|
|
|
|
|
num=$((num + 1)) # 变量递增,双括号内的 $ 可以省略
|
|
|
|
num=$((1 + (2 + 3) * 2)) # 复杂计算
|
|
|
|
num=$((1 + (2 + 3) * 2)) # 复杂计算
|
|
|
|
|
|
|
|
|
|
|
|
$(UNIX command) # 运行命令,并将标准输出内容捕获并返回
|
|
|
|
$(UNIX command) # 运行命令,并将标准输出内容捕获并返回
|
|
|
|
|
|
|
|
varname=$(id -u user) # 将用户名为 user 的 uid 赋值给 varname 变量
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
|
|
|
|
# 函数
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 定义一个新函数
|
|
|
|
|
|
|
|
function myfunc() {
|
|
|
|
|
|
|
|
# $1 代表第一个参数,$N 代表第 N 个参数
|
|
|
|
|
|
|
|
# $# 代表参数个数
|
|
|
|
|
|
|
|
# $0 代表被调用者自身的名字
|
|
|
|
|
|
|
|
# $@ 代表所有参数,类型是个数组
|
|
|
|
|
|
|
|
# $* 空格链接起来的所有参数,类型是字符串
|
|
|
|
|
|
|
|
{shell commands ...}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
myfunc # 调用函数 myfunc
|
|
|
|
|
|
|
|
myfunc arg1 arg2 arg3 # 带参数的函数调用
|
|
|
|
|
|
|
|
unset -f myfunc # 删除函数
|
|
|
|
|
|
|
|
declare -f # 列出函数定义
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
|
|
|
|
# 条件判断(兼容 posix sh 的条件判断):man test
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
statement1 && statement2 # and 操作符
|
|
|
|
|
|
|
|
statement1 || statement2 # or 操作符
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
exp1 -a exp2 # exp1 和 exp2 同时为真时返回真
|
|
|
|
|
|
|
|
exp1 -o exp2 # exp1 和 exp2 有一个为真就返回真
|
|
|
|
|
|
|
|
( expression ) # 如果 expression 为真时返回真,输入注意括号前反斜杆
|
|
|
|
|
|
|
|
! expression # 如果 expression 为假那返回真
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
str1 = str2 # 判断字符串相等,如 [ "$x" = "$y" ] && echo yes
|
|
|
|
|
|
|
|
str1 != str2 # 判断字符串不等,如 [ "$x" != "$y" ] && echo yes
|
|
|
|
|
|
|
|
str1 < str2 # 字符串小于,如 [ "$x" \< "$y" ] && echo yes
|
|
|
|
|
|
|
|
str2 > str2 # 字符串大于,注意 < 或 > 是字面量,输入时要加反斜杆
|
|
|
|
|
|
|
|
-n str1 # 判断字符串不为空(长度大于零)
|
|
|
|
|
|
|
|
-z str1 # 判断字符串为空(长度等于零)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-a file # 判断文件存在,如 [ -a /tmp/abc ] && echo "exists"
|
|
|
|
|
|
|
|
-d file # 判断文件存在,且该文件是一个目录
|
|
|
|
|
|
|
|
-e file # 判断文件存在,和 -a 等价
|
|
|
|
|
|
|
|
-f file # 判断文件存在,且该文件是一个普通文件(非目录等)
|
|
|
|
|
|
|
|
-r file # 判断文件存在,且可读
|
|
|
|
|
|
|
|
-s file # 判断文件存在,且尺寸大于0
|
|
|
|
|
|
|
|
-w file # 判断文件存在,且可写
|
|
|
|
|
|
|
|
-x file # 判断文件存在,且执行
|
|
|
|
|
|
|
|
-N file # 文件上次修改过后还没有读取过
|
|
|
|
|
|
|
|
-O file # 文件存在且属于当前用户
|
|
|
|
|
|
|
|
-G file # 文件存在且匹配你的用户组
|
|
|
|
|
|
|
|
file1 -nt file2 # 文件1 比 文件2 新
|
|
|
|
|
|
|
|
file1 -ot file2 # 文件1 比 文件2 旧
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
num1 -eq num2 # 数字判断:num1 == num2
|
|
|
|
|
|
|
|
num1 -ne num2 # 数字判断:num1 != num2
|
|
|
|
|
|
|
|
num1 -lt num2 # 数字判断:num1 < num2
|
|
|
|
|
|
|
|
num1 -le num2 # 数字判断:num1 <= num2
|
|
|
|
|
|
|
|
num1 -gt num2 # 数字判断:num1 > num2
|
|
|
|
|
|
|
|
num1 -ge num2 # 数字判断:num1 >= num2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
|
|
|
|
# 流程控制:if 和经典 test,兼容 posix sh 的条件判断语句
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
test {expression} # 判断条件为真的话 test 程序返回0 否则非零
|
|
|
|
|
|
|
|
[ expression ] # 判断条件为真的话返回0 否则非零
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
test cond && cmd1 # 判断条件为真时执行 cmd1
|
|
|
|
|
|
|
|
[ cond ] && cmd1 # 和上面完全等价
|
|
|
|
|
|
|
|
[ cond ] && cmd1 || cmd2 # 条件为真执行 cmd1 否则执行 cmd2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
test -e /tmp; echo $? # 调用 test 判断 /tmp 是否存在,并打印 test 的返回值
|
|
|
|
|
|
|
|
[ -f /tmp ]; echo $? # 和上面完全等价,/tmp 肯定是存在的,所以输出是 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 判断 /etc/passwd 文件是否存在
|
|
|
|
|
|
|
|
# 经典的 if 语句就是判断后面的命令返回值为0的话,认为条件为真,否则为假
|
|
|
|
|
|
|
|
if test -e /etc/passwd; then
|
|
|
|
|
|
|
|
echo "alright it exists ... "
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
echo "it doesn't exist ... "
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 和上面完全等价,[ 是个和 test 一样的可执行程序,但最后一个参数必须为 ]
|
|
|
|
|
|
|
|
# 这个名字为 "[" 的可执行程序一般就在 /bin 或 /usr/bin 下面,比 test 优雅些
|
|
|
|
|
|
|
|
if [ -e /etc/passwd ]; then
|
|
|
|
|
|
|
|
echo "alright it exists ... "
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
echo "it doesn't exist ... "
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 判断变量的值
|
|
|
|
|
|
|
|
if [ "$varname" = "foo" ]; then
|
|
|
|
|
|
|
|
echo "this is foo"
|
|
|
|
|
|
|
|
elif [ "$varname" = "bar" ]; then
|
|
|
|
|
|
|
|
echo "this is bar"
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
echo "neither"
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 复杂条件判断,注意,小括号是字面量,实际输入时前面要加反斜杆
|
|
|
|
|
|
|
|
if [ \( $x -gt 10 \) -a \( $x -lt 20 \) ]; then
|
|
|
|
|
|
|
|
echo "yes, between 10 and 20"
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 可以用 && 命令连接符来做和上面完全等价的事情
|
|
|
|
|
|
|
|
[ \( $x -gt 10 \) -a \( $x -lt 20 \) ] && echo "yes, between 10 and 20"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 判断程序存在的话就执行
|
|
|
|
|
|
|
|
[ -x /bin/ls ] && /bin/ls -l
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
##############################################################################
|
|
|
|
# References
|
|
|
|
# References
|
|
|
@ -268,6 +385,7 @@ $(UNIX command) # 运行命令,并将标准输出内容捕获并返
|
|
|
|
|
|
|
|
|
|
|
|
https://github.com/LeCoupa/awesome-cheatsheets/blob/master/languages/bash.sh
|
|
|
|
https://github.com/LeCoupa/awesome-cheatsheets/blob/master/languages/bash.sh
|
|
|
|
https://ss64.com/bash/syntax-keyboard.html
|
|
|
|
https://ss64.com/bash/syntax-keyboard.html
|
|
|
|
|
|
|
|
http://wiki.bash-hackers.org/commands/classictest
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|