收集一些在平时或者在特定情况下经常使用的指令或者 bash 指令以及参数,省的用的时候想不起来,也免去迷失在搜索的 汪洋之中,节约些时间。

if 条件判断

  • if 语句格式
if condition; then
    execute something ...
elif condition; then
    execute something ...
else
    execute something
fi

其中 elif、else 两部分可以都没有,也可以只有其中一个,或者两者都有。

  • 条件表达式之文件表达式

    • if [ -f file ] 如果文件存在
    • if [ -d … ] 如果目录存在
    • if [ -s file ] 如果文件存在且非空
    • if [ -r file ] 如果文件存在且可读
    • if [ -w file ] 如果文件存在且可写
    • if [ -x file ] 如果文件存在且可执行
  • 条件表达式之整数变量表达式

    • if [ int1 -eq int2 ] 如果int1等于int2
    • if [ int1 -ne int2 ] 如果不等于
    • if [ int1 -ge int2 ] 如果 >=
    • if [ int1 -gt int2 ] 如果 >
    • if [ int1 -le int2 ] 如果 <=
    • if [ int1 -lt int2 ] 如果 <
  • 条件表达式之字符串变量表达式

    • if [ $a = $b ] 如果string1等于string2,字符串允许使用赋值号做等号
    • if [ $string1 != $string2 ] 如果string1不等于string2
    • if [ -n $string ] 如果string 非空(非0),返回0(true)
    • if [ -z $string ] 如果string 为空
    • if [ $sting ] 如果string 非空,返回0 (和-n类似)
  • 逻辑表达式

    • 逻辑非 ! 条件表达式的相反

      • if [ ! 表达式 ]
      • if [ ! -d $num ] 如果不存在目录$num
    • 逻辑与 –a 条件表达式的并列

      • if [ 表达式1 –a 表达式2 ]
    • 逻辑或 -o 条件表达式的或

      • if [ 表达式1 –o 表达式2 ]

shell 中的特殊变量

  • $$ Shell本身的PID(ProcessID)
  • $! Shell最后运行的后台Process的PID
  • $? 最后运行的命令的结束代码(返回值)
  • $- 使用Set命令设定的Flag一览
  • $* 所有参数列表。如"$*“用「"」括起来的情况、以”$1 $2 … $n"的形式输出所有参数。
  • $@ 所有参数列表。如"$@“用「"」括起来的情况、以”$1" “$2” … “$n” 的形式输出所有参数。
  • $# 添加到Shell的参数个数
  • $0 Shell本身的文件名
  • $1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数 …。

统计 Nginx 网站访问日志前 5 的 IP

awk -F ' ' '{print $1}' www_example_com.access.log | sort | uniq -c | sort -nr | head -n 5