基础
.bash_history历史记录Tab补全alias命令别名, alias lm = ‘ls -al’ , unalias lm (临时) vi /root/.bashrc (永久)type cd命令类型\转义
变量
- 变量未设置时,默认为空
PATH=$PATH:/home/bin变量累加export PATH使变量成为环境变量- 一般默认 大写为系统变量 小写为自行设置变量
- 变量中 单引号’’(纯文本) 与 双引号 “” (保持原本特性)
current_path=$(pwd)接命令赋值给变量。 等同于 current_path=pwdunset current_path取消变量- 子进程取消的变量 对 父进程无影响,子进程只继承父进程的环境变量与
export。 work=/opt/software可以cd $work。写入.bash_profile全局生效。env查看环境变量set查看所有变量echo $?只与上一个命令有关,上一个命令成功返回0
变量读取,数组与声明
1 | read -s -p "please input root password:" serverPwd # -p 提示 -s 不显示 |
数组
1 | var[1]='small' |
declare 和 typeset 一样声明变量类型
1 | sum=100+1 |
$
1 | $0 当前脚本的文件名 |
与文件系统及程序的限制关系:ulimit
ulimit 用来限制单个用户/进程能占用的资源,防止一个失控的程序拖垮整台机器。
1 | ulimit -a # 查看当前所有限制 |
ulimit 改的是当前会话,重登录就失效。要永久生效写 /etc/security/limits.conf:
1 | * soft nofile 65535 |
soft 是告警/默认值,hard 是上限,普通用户只能在 hard 以内调整 soft。数据库、Elasticsearch、Nginx 这类高并发服务部署时基本都要先把 nofile 调上去,否则会报 Too many open files。
数据流重定向
st:standard
- stdin < << (代码0)
- stout > >> (代码0)
- stderr 2> 2>> (代码2)
>/dev/null ,2>/dev/null丢弃输出> list 2>&1 (都输出 list)或 &> list
命令执行判断依据
- cmd1,cmd2,cmd3 依次执行
- cmd1 && cmd2 && cmd3 前面成功,后面才执行($# = 0)
- cmd1 || cmd2 || cmd3 前面成功,后面就不执行($# = 0)
管道命令(pipe)
将前一个命令的stout(不会处理stderr) 传到下一个命令的stdin中
1 | yes|bash ...sh(执行命令输入yes) |
双向重定向(tee)
将数据流同时输出到屏幕和文件中
1 | last |tee -a last.list # -a 累加 |
shell脚本
shell script 是利用shell的功能所写的一个纯文本文件,将一些shell的语法命令写在里面,搭配正则表达式,管道命令与数据流重定向等功能达到我们想要的目的。
xargs 从输入流获取字符串,然后利用空白、换行符等切割字符串,在这些字符串的基础上构造指令,最后一行行执行这些指令。
1 | root@tj:~/testt# ls |
vim /etc/yum/pluginconf.d/subscription-manager.conf
enabled=0