概述
SHELL编程
学习书本来自"linux命令行与shell脚本编程大全·第三版"
———在此,Christine还想感谢她的先生Timothy,感谢他的鼓励、耐心和倾听,即使他并不理解她说的是什么,也能全心支持她。 --作者寄语
也有老男孩教育的一些笔记(正则,三剑客)
本笔记只做示例(pdf标记效率高),不记理论!
笔记格式“python缩进”
理解shell
(pwd;echo $BASH_SUBSHELL)&
#echo $BASH_SUBSHELL 检查是否生成了子shell,未生成输出0,生成将输出1或以上数字
#括号的加入使命令列表变成了进程列表,生成了一个子shell来执行对应的命令。&放入后台执行
协程
coproc #就是将命令放入后台执行与&一样
[root@localhost ~]# coproc sleep 50
[1] 4257
[root@localhost ~]# jobs
[1]+
运行中
coproc COPROC sleep 50 & #协程默认给进程起了名字COPROC
[root@localhost ~]# coproc ybt { sleep 50; } #协程自定义进程名字 coproc 自定义 { 命令; }(命令两边的空格必须有)
[2] 4258
[root@localhost ~]# jobs
[1]-
运行中
coproc COPROC sleep 50 &
[2]+
运行中
coproc ybt { sleep 50; } &
sh +x test.sh #来调试脚本
环境变量
printenv或env #查看全局环境变量
set #显示局部变量、全局变量以及用户定义变量。
[root@localhost ansible]# printenv HOME
/root
[root@localhost ansible]# echo $HOME
/root
[root@ybt ~]# set |head -2
BASH=/usr/bin/bash
局部变量
定义局部变量
#局部变量尽量使用小写,系统环境变量都是大写
#变量名、等号和值之间不能有空格,
#局部变量,只能在当前shell使用,进入子进程和进入父进程都无法使用
[root@localhost ~]# l=ybt
[root@localhost ~]# echo $l
ybt
定义全局变量 #export
[root@localhost ~]# bash
[root@localhost ~]# echo $l #在子进程shell中无法使用父进程的局部变量
[root@localhost ~]# exit
[root@localhost ~]# echo $l
#退出后继续使用
ybt
[root@localhost ~]# export l #export将局部变量导出到环境变量,变量名不需要加$
[root@localhost ~]# bash
[root@localhost ~]# echo $l
#子进程可以使用了
ybt
子shell中修改父shell全局变量的值,不影响父shell变量的值
[root@localhost ~]# l=kexiao #子shell中修改
[root@localhost ~]# echo $l
kexiao
[root@localhost ~]# exit
[root@localhost ~]# echo $l
#值不变
ybt
子shell中就算使用export修改父shell全局变量的值,也不影响父shell变量的值
root@localhost ~]# bash
[root@localhost ~]# l=kexiao #修改
[root@localhost ~]# export l #将局部变量导出到环境变量
[root@localhost ~]# echo $l
kexiao
[root@localhost ~]# exit
[root@localhost ~]# echo $l #值不变
ybt
删除环境变量 #unset
#在子进程删除全局变量只对子进程有效,与修改一样
[root@localhost ~]# unset l
#要用到变量,使用$;如果要操作变量,不使用$
#printenv例外
变量每次被引用时,都会输出当前赋给它的值。引用一个变量值时需要使用美元符
#以下引用变量值可能导致的错误
[root@ybt ~]# ke=10
[root@ybt ~]# echo $ke
10
[root@ybt ~]# ti=ke+1
[root@ybt ~]# echo $ti
ke+1
#这可不是我们想要的结果
[root@ybt ~]# ti=$ke+1 #引用变量值需要使用$
[root@ybt ~]# echo $ti
10+1
#已经接近了我们想要的结果
[root@ybt ~]# ti=$[ $ke+1
]
[root@ybt ~]# echo $ti
11
#我们想要的结果
变量赋值拼接
[root@ybt ~]# echo $l
ybt
[root@ybt ~]# kk=$l"kexiao"
#向已有变量拼接一个值
[root@ybt ~]# echo $kk
ybtkexiao
常用变量
#个人认为能用到的变量
HOME 当前用户的主目录
PATH shell查找命令的目录列表,由冒号分隔
PS1 shell命令行界面的主提示符
PS2 shell命令行界面的次提示符
BASH 当前shell实例的全路径名/ SHELL bash shell的全路径名
HOSTNAME 当前主机的名称
LANG shell的语言环境类别
PPID bash shell父进程的PID
PWD 当前工作目录
USER 显示当前用户
RANDOM 返回一个0~32767的随机数(对其的赋值可作为随机数生成器的种子)
SECONDS 自从shell启动到现在的秒数(对其赋值将会重置计数器)
$$ 当前shell的PID;脚本使用就是当前脚本pid
[root@ybt ~]# echo $$
77752
转义字符
b 退格字符
f 走纸符
n 换行符
r 回车符
t 水平制表符
v 垂直制表符
ddd 1-3位八进制值
xhex 十六进制值
c 任何字面字符
关于linux特殊含义的转义符033
#来自https://www.cnblogs.com/demonxian3/p/8963807.html
格式: echo -e "