基础
.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
2
3var[1]='small'
var[2]='big'
echo "$var[1],$var[2]"
declare 和 typeset 一样声明变量类型1
2
3
4sum=100+1
echo $sun # 100+1
declare -i sum=100+1
echo $sun # 101
$
1 | $0 当前脚本的文件名 |
与文件系统及程序的限制关系:ulimit
数据流重定向
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
2
3
4
5
6
7
8
9
10yes|bash ...sh(执行命令输入yes)
echo $PATH |cut -d ':' -f 4 # 以 : 分割$PATH ,取出第4个
echo $PATH |cut -d ':' -f 3,5 # 以 : 分割$PATH ,取出第3,5个
export | cut -c 12- # 取出12到最后的字符
last | grep -i root # 找出last中的含root行,忽略大小写
last | grep -v root # 不含root行
last | grep root|cut -d ' ' -f 1| sort | uniq -ic # i 忽略大小写 c 计数
cat /etc/os-release | wc # 输出 行 字数 字符数
wc -l(行) -w(英文单字) -m (多少字符)
grep os /etc/os-release -n -i # -n 显示行数, -i 忽略大小写
双向重定向(tee)
将数据流同时输出到屏幕和文件中1
last |tee -a last.list # -a 累加
shell脚本
shell script 是利用shell的功能所写的一个纯文本文件,将一些shell的语法命令写在里面,搭配正则表达式,管道命令与数据流重定向等功能达到我们想要的目的。
xargs 从输入流获取字符串,然后利用空白、换行符等切割字符串,在这些字符串的基础上构造指令,最后一行行执行这些指令。1
2
3
4
5
6root@tj:~/testt# ls
1.txt 2.txt 3.txt
root@tj:~/testt# ls | xargs -I filename mv filename prefix_filename
root@tj:~/testt# ls
prefix_1.txt prefix_2.txt prefix_3.txt
vim /etc/yum/pluginconf.d/subscription-manager.conf
enabled=0