bash子程序仅会继承父程序的环境变量,子程序不会继承父程序的自定义变量。所以你在原本的bash中自定义的变量在进入子程序后就会消失,等你离开子程序回到原来的父程序,这个变量又会出现。
可以使用export将自定义变量变成环境变量,这样子就不会出现这个问题了。
环境变量 = 全局变量
自定义变量 = 局部变量
1.2 Shell的变量功能
1.2.1 与文件系统及程序的限制关系:ulimit
[root@hadoop00 ~ 16:37 74]#ulimit -a
core file size (blocks, -c) 0 <==只要是0就代表没限制
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited <==可建立的单一文件的大小
pending signals (-i) 3882
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024 <==同时可开启的文件数量
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 3882
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
1.2.2变量内容的删除、取代与替换
删除:${variable#} 从前往后删除,删除最短的一个
${variable##} 从前往后删除,删除最长的一个
${variable%} 从后往前删除,删除最短的一个
${variable%%}从后往前删除,删除最长的一个
取代:username=${username-root}如果username未设定内容,则以root取代,若已设定内容,则保留原有内容。
username=${username:-root}加入冒号后,不管之前有无设定内容,均以root取代。
1.3 命令别名与立式命令
1.3.1 命令别名设定与取消:
alias, unalias 相当于宏定义一样
alias lm='ls -al | more' 执行此命令后使用lm就相当于使用ls -al | more.
unalias则是取消命令的别名设定。
1.3.2历史命令:history
功能:显示之前执行过的命令。
$HISTSIZE 保存历史命令的条数
history 列出历史命令
history -w 在默认情况下,会将历史记录写入 ~/.bash_history 当中
!66 执行历史命令的第66行命令
!! 执行上一条指令
!al 执行最近以al为开头的指令
1.4 Bash Shell 的操作环境
1.4.1 路径与指令搜寻顺序
1. 以相对/绝对路径执行指令,例如 /bin/ls 或者 ./ls;
2. 由 alias 找到该指令来执行;
3. 由 bash 内建的(builtin)指令来执行;
4. 透过 $PATH 这个变量的顺序搜寻到第一个指令来执行。
1.4.2 bash 的进站与欢迎讯息:/etc/issue, /etc/motd
1.4.3 bash 的环境配置文件
login shell 与 non-login shell
- login shell: 取得bash时需要完整的登入流程的,就称为login shell。举例来说,你要有tty1~tty6登入,需要输入用户的账号与密码,此时取得的bash就称为 login shell。
- non-login shell: 取得bash接口的方法不需要重复登入的举动,举例来说,(1)X windows登陆,(2)bash环境下下达bash指令。
login 与 non-login shell读取的配置文件数据不一致。
login shell读取的两个配置文件:
- /etc/profile: 这就是系统整体的设定,你最好不要修改这个文件。
- ~/.bash_profile或~/.bash_login或~/.profile:属于使用者个人设定,你要改自己的数据,就写入这里。
- /etc/profile(login shell才会读取)
- ~/.bash_profile(login shell 才会读取)
bash在读完了整体环境设定的/etc/profile,接下来则会是读取使用者的个人配置的文件。在login shell的bash环境钟,所读取的个人偏好配置文件其实主要有三个,依次分别是:
- ~/.bash_profile
- ~/.bash_login
- ~/.profile
其实bash的login shell设定只会读取上面三个文件的其中一个,而读取的顺序则是依照上面的顺序。只读一个。
最终读取的配置文件是~/.bashrc这个文件,所以,可以讲自己的偏好设定写入该文件即可。接下来讨论一下source与~/.bashrc。
- source(或小数点):读入环境配置文件的指令
由于/etc/profile 和 ~/.bash_profile都是在取得login shell的时候才会读取的配置,所以,如果你讲自己的偏好设定写入上述的文件后,通常都是得注销再登入才能生效。可以利用source指令再不注销登陆的情况下让配置文件生效。
- ~/.bashrc(non-login shell 会读)
1.4.4 终端机的环境设定:stty set
1.5 数据流重导向
- standard output 与 standard error output
ll / >~/rootfile 覆盖内容
ll / >>~/rootfile 累加内容
- standard input < 与 <<
将原来需要由键盘输入