bash脚本编程 笔记

特殊字符

cha meaning
# 注释
命令分隔符,在一行写多条命令,if []; then
;; 终止case选项
. source命令
: 空命令,while : 为死循环, then:为占位符,path的分隔符
:>file 会先清空文件,再新建
取反符号
* 通配符号
? 测试一个条件的结果,三元操作符,测试是否被set
|var1=1;echovar1
$? 退出状态码
$$ 进程ID
$# 操作数
() 命令组
{} 多个文件扩展,cat {f1,f2,f3} > cf; cp file2.{txt, backup}
[] 条件测试,数组元素
[[]] 测试
> &> >& >> < <> 重定向
&>2 output->stderr
| 管道,分析前面输出作为后面输入,`cat *.lst
& 后台运行
- 选项参数
~+ 当前工作目录
~- 先前工作目录
=~ 正则
$(A/B/C) 把A中的B换成C
until [-z "$1"]
do
    echo -n "$1 "
    shift # 利用shift逐个读取
done
  • 双引号中允许引用变量,单引号中不可
  • exit用来结束一个脚本,0表示成功,1-255表示错误
  • if/then结构用来判断退出状态码==0

内部变量

para meaning
$BASH bash二进制程序的位置
$BASH_ENV BASH启动文件
$BASH_SUBSHELL 子shell的层次
$BASH_VERSINFO[N] 安装bash的基本信息
$BASH_VERSION
$DIRSTACK 目栈顶端值
$EDITOR 脚本默认编辑器
$EUID 当前用户标识号
$FUNCNAME 当前执行函数名
$GLOBIGNORE 文件名模式匹配列表
$GROUPS 目前用户组
$HOME
$HOSTNAME
$HOSTTYPE 主机类型
$IFS 内部域标识符
$LINENO 自身在脚本中行号
$OLDPWD 之前工作目录
$PATH 可执行文件搜索路径
$PIPESTATUS
$PPID 父进程PID
$PWD 当前工作目录
$TMOUT 超时跳出
0,1,$2 位置参数
$# 位置参数个数
$*
${#str} 字符串长度,可用expr代替
${string:position(:length)} 从position处提取子串
paradefault/{para:-default} 默认参数
${var/pattern/replace} 替换第一个
${var//pattern/replace} 全局替
eval a = \$$a 反射(间接引用)
$RANDOM range(0,32767)
(()) C语言风格

- 循环:for var in list[]
- for num in echo $NUMBER
- for word in {strings "2" | grep "$1”)
- 测试

case "$var" in
    "condition1") xxx;;
    "condition2") xxx;;
    "condition3") xxx;;
esac    
  • 文件系统:cd,pwd
  • 变量let,eval,set
  • source,.会指向一个脚本
  • caller:调用者信息

作业控制命令

para meaning
jobs ls
disown 删除作业
fg,bg 前景背景
wait 脚本等待后台左右作业借宿为止
suspend ctrl-Z
kill 发送结束信号
killall 通过名字删除
enable 禁用/回复内奸命令
  • ls: -r递归,-s按照大小,-t按照修改时间
  • cat,tac: -n行号,-b非空行号,-s压缩空行
  • chattr:修改文件属性:+i永远不变,-u不可删除,-c自动压缩
  • ln:-s穿越文件系统创建链接
  • man,info:infoman详细
  • find ~/ -name 'core*' exec rm {} \;删除所有coredump
  • badname = echo "$filename" | sed -n '/[+(;"\=?~{}<>&$|$]/p';rm $badname 2 >/dev/null错误信息被抛弃
  • xargs:分成小块处理ls |xargs -p -1 gzip每次压缩一个
  • date:+%N十亿分之一表示当前时间,+%j今天是本年度第几天,+%k%M小时数显示,`–date=’6 days ago’
  • touch:修改文件被访问时间
  • sort,uniq:对于文件操作,sort -nr产生一个数字反转序列:sort | uniq -c | sort -nr
  • cut:从文件中提取特定域,-d字段定界符,-f域分隔符
  • paste:将多个文件以么个文件一列的方式合并到一个文件当中
  • grep: grep pattern [file..]: 如果没有指定参数,默认为stdout,-i忽略大小写,-w匹配整个单词,-r递归,-n列出行号
  • wc:word count
  • tr: 字符转换过滤器: tr "A-Z" "*" <filename
  • host: 通过名称/IP地址找到DNS
  • ipcalc:显示主机IP
  • traceroute:跟踪包发到远端主机中的路由信息
  • uucp:断点续传的unix2unix传输(uux执行,cu终端链接)
  • telnet:链接远端主机的工具协议
  • wget:使用非交互形式从web/ftp下载数据
  • rlogin,rsh,rcp,rsync:远端登陆,远端shell,远端拷贝,远端同步
  • scp:安全拷贝,使用ssh类似的安全层
  • factor:正数质因数分解
  • who:列出当前所有登陆用户,
  • w:用户和它们的进程
  • logname/whoami: 当前用户的用户名
  • tty:当前终端的名字,stty 显示并修改终端设置
  • setterm:设置特定终端的属性:setterm -bold on, setterm -cursor off
  • uname:系统信息
  • arch: 系统硬件体系结构
  • lsof:列出打开的文件信息,包括宿主,尺寸和相关信息
  • strace/ltrace:系统跟踪/库跟踪
  • nmap:网络映射和端口扫描
  • free:显示内存和缓存的使用情况
  • lsdev:列出系统设备(显示所有安装的硬件)
  • du:递归的显示磁盘文件的使用情况
  • df:列表形式显示文件系统的使用情况
  • stat:文件的详细信息
  • vmstat:虚拟内存的使用信息
  • hostname:显示系统的主机名字
  • size:2进制可执行文件或归档文件每部分的尺寸
  • logger:系统日志,存在/var/log/message
  • pgrep,pkill:ps+grep/kill
  • top:显示CPU占有率最高的进程
  • nice:修改后台作业的优先级,只有root能设为负数
  • halt,shutdown,reboot:系统关机命令,比电源关机优先级高
  • ifconfig:网络接口配置调试工具
  • iwconfig:ifconfig的无线版本
  • chkconfig:检查网络配置
  • sync:强制清空磁盘读写buff
  • badlocks:检查磁盘的空块
  • dump/restore:对于原始磁盘使用二进制形式写备份文件
  • ulimit -f:系统资源的使用上限,-c为coredump的尺寸
  • quota/setquota:用户的磁盘配额
  • 0<&-,1>&-关闭输入输出:exec 4<&0; exec > $1;exec 7>&1; exec >$2

gcd:"$1[p]s2[lip/dli%0=1dvsr]s12sid2%0=13sidvsr[dli%0=1lrli2+dsi!>.]ds.xd1<2" | dc

正则表达式

  • 字符集+锚+修饰符
  • *任意多次,.一个,?一次或零次,+一次或多次,\{\}匹配次数
  • ^,$:行首行尾
  • []字符集中一个字符,|RE中或操作符
  • \< \>单词边界
  • [:alnum:],[:alpha:],[:blank:],[:digit:],[:graph:],[:lower:],[:sapce:],[:xdigit:]

特殊目录

dir meaning
/dev 磁盘文件
/proc 当前进程
/zero null流,作为临时交换文件
/null 只写文件
阅读更多
文章标签: 笔记
个人分类: 工具
上一篇因吹思挺
下一篇游戏引擎架构 笔记
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭