Skip to content

Instantly share code, notes, and snippets.

@xiazhibin
Last active October 29, 2018 02:49
Show Gist options
  • Save xiazhibin/1fbd9be23ceaa2341e12f2ca91e5a97d to your computer and use it in GitHub Desktop.
Save xiazhibin/1fbd9be23ceaa2341e12f2ca91e5a97d to your computer and use it in GitHub Desktop.
Shell

一些常用表达式

  • OS=$(uname -s) # Darwin
  • ARCH=$(uname -m) # x86_64
  • if是检测commad执行的返回情况,正常(exit code为0)则True
if command; #等价于 command;if [$? -eq 0]
then 
  .... 
else 
  .... 
if

一些特殊符号

  • $? 上一条命令的返回
  • $_ 前一条命令的最后一个参数 或者 如果没有参数,就是上一条命令 mkdir my-new-project && cd $_
  • $@ 是传给脚本的所有参数的列表
  • $# 参数个数
  • $$ pid
  • $0 是脚本本身的名字
  • $1 是传递给该shell脚本的第一个参数
  • ${var:-default} 如果没有var就是用default
  • ${parameter/pattern/string} 参数替换

查看系统运行时间

cat /proc/uptime| awk -F. '{run_days=$1 / 86400;run_hour=($1 % 86400)/3600;run_minute=($1 % 3600)/60;run_second=$1 % 60;printf("系统已运行:%d天%d时%d分%d秒",run_days,run_hour,run_minute,run_second)}'

grep 排除自身

ps ax | grep sth | grep -v grep

数字的比较:

  • -eq 相等(equal)
  • -ne 不等(not equal)
  • -gt 大于(greater than)
  • -lt 小于(less than)
  • -ge 大于等于 (greater than or equal)
  • -le 小于等于 (less than or equal)

字符串的比较:

  • [ $str1 = $str2 ] 等于
  • [ $str1 != $str2 ] 不等于
  • [ -z $str ] 空字符串返回true
  • [ -n $str ] 或者 [ $str ] 非空字符串返回true

测试

#!/bin/sh
if [ $max -gt $min ] 

    then 

        echo 1

    else

        echo 0

fi

常用test

  • -d filename 如果 filename为目录,则为真
  • -e filename 如果 filename存在,则为真 例如[[ -d /tmp/mydir ]]
  • -f filename 如果 filename为常规文件,则为真
  • -L filename 如果 filename为符号链接
  • num1 -eq num2 例如[[$1 -eq 3]]

后台程序

watch -n 3 date

  • watch -n 3 date & 当在前台运行某个作业时,终端被该作业占据;可以在命令后面加上&实现后台运行
  • nohup watch -n 3 date & 使用&命令后,作业被提交到后台运行,当前控制台没有被占用,但是一但把当前控制台关掉(退出帐户时),作业就会停止运行。nohup命令可以在你退出帐户之后继续运行相应的进程。在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中 nohup command > myout.file 2>&1
  • ctrl + z 可以将一个正在前台执行的命令放到后台,并且处于暂停状态。
  • ctrl+c 终止前台命令。
  • jobs 查看当前有多少在后台运行的命令。 jobs -l可以显示出pid
  • bg 将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出。
  • fg 将后台中的命令调至前台继续运行
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment