指令记录
全局变量对所有shell包括子shell都是可见的。局部变量在当前shell中可见,子shell中设置的局部变量,回到父shell中就不可见了。
全局变量的创建:先建一个局部变量,通过export命令完成全局化。(变量名、等号、值之间没有空格) my_var="i am global" export $my_var
在子shell修改全局变量的值 或 删除全局变量,并不会影响到父shell中该变量的值。
unset my_var:删除环境变量。变量前不要使用$。使用变量时,前加$。操作变量时,不加$,例外是printenv显示变量值时要加$。
set:显示特定进程所有的环境变量,包括局部、全局、及用户自定义变量。
env或printenv:查看全局变量。
PATH:定义了命令和程序查找的目录,以冒号:进行分隔,其修改持续到退出或重启系统。
shell的三种启动方式:
etc/profile文件是默认的主启动文件,根据发行系统 .bash_profile、.bash_rc、.bash_login、.profile4个文件不一定都存在。
1. 登录shell:系统启动时默认启动的一个bash shell。 依次读取etc/profile文件、$HOME/.bash_profile、$HOME/.bashrc、$HOME/.bash_login、$HOME/.profile。
2. 交互式shell:命令行中通过输入bash启动的,只读取HOME目录下的 .bashrc文件。
3. 非交互式shell:执行shell脚本时用的是这种shell。如果启动了子shell,且父shell是登陆shell,可读etc/profile, etc/profile.d/*.sh, $HOME/.bashrc。 不启动子shell,则继承当前shell的局部和全局变量。
readlf:可对可执行、库文件等elf文件进行分析,使用方式见 https://blog.csdn.net/wangbaochu/article/details/41548549
objdump -T lib*.so | grep name:查找某个动态库中是否包含某个对象,比如某个函数。
ll:指令可显示当前路径下的 文件和 链接关系
反引号`` 和 $() 进行命令替换:var=`date` 或 var=$(date) 将date命令的时间输出赋给变量var,=前后不能有空格。
>:输出重定向,新的数据会覆盖原文件的数据 date > text >>: 在原文件里追加数据 date >> text
>:输入重定向,将文件的内容重定向到某个命令 command < file <<:内联输入重定向
bc:进入计算器 quit退出计算器
$[ ]: 将表达式放到方括号种,进行数学运算。 var=$[5*(5-6)]
ps -f:显示进程,可展示shell和子shell的关系
ps --forest: 显示子shell间的嵌套结构
echo $BASH_SUBSHELL:返回0,表明没有子shell,返回非0则说明有子shell
将命令列表用括号()括起来,可以在子shell中运行。(pwd ; ls ; cd /etc ; ls),不加括号时是在当前shell中执行。
jobs -l:显示当前运行在后台的所有进程
命令后加&:可以让命令在后台模式运行
type command:查看某个命令command是内建命令(不启动子shell来执行)还是外部命令(存在于bash shell外的程序,可通过which命令找到它的位置)
列表后面继续添加值:list="a b c d", list=$list" e"
传递参数:shell脚本后面 加 数据 即可,./test a b。 $0是程序名,$1是第一个参数,$2是第二个参数,脚本中使用$# 代表参数的个数。