update bash cheatsheet

pull/2/head
skywind3000 7 years ago
parent 427337e6fe
commit 205d253eb0

@ -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} # 查看用户的 uidgid 以及所属其他用户组
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

Loading…
Cancel
Save