您的位置:首页 > 运维架构 > Shell

linux学习篇8--- shell,bash讲解 2 bash的配置文件

2012-11-12 20:44 309 查看
linux学习篇8---- 《鸟哥的Linux私房菜基础学习篇(第三版)》读书笔记

数组 (array) 变量类型

var[index]=content




范例:配置上面提到的 var[1] ~ var[3] 的变量。
[root@www ~]# var[1]="small min"
[root@www ~]# var[2]="big min"
[root@www ~]# var[3]="nice min"
[root@www ~]# echo "${var[1]}, ${var[2]}, ${var[3]}"
small min, big min, nice min


数组的变量类型比较有趣的地方在于『读取』,一般来说,建议直接以 ${数组} 的方式来读取

与文件系统及程序的限制关系:
ulimit


查阅相关资料

[b]变量内容的删除与取代
[/b]

变量配置方式说明
${变量#关键词}

${
变量##关键词}
若变量内容从头开始的数据符合『关键词』,则将符合的最短数据删除

若变量内容从头开始的数据符合『关键词』,则将符合的最长数据删除
${变量%关键词}

${
变量%%关键词}
若变量内容从尾向前的数据符合『关键词』,则将符合的最短数据删除

若变量内容从尾向前的数据符合『关键词』,则将符合的最长数据删除
${变量/旧字符串/新字符串}

${
变量//旧字符串/新字符串}
若变量内容符合『旧字符串』则『第一个旧字符串会被新字符串取代

若变量内容符合『旧字符串』则『全部的旧字符串会被新字符串取代
new_var=${old_var-content}
新的变量,主要用来取代旧变量。新旧变量名称其实常常是一样的

new_var=${old_var-content}
这是本范例中的关键词部分!必须要存在的哩!

new_var=${old_var-content}
旧的变量,被测试的项目!

new_var=${old_var-content}
变量的『内容』,在本范例中,这个部分是在『给予未配置变量的内容』

变量配置方式str 没有配置str 为空字符串str 已配置非为空字符串
var=${str-expr}var=exprvar=var=$str
var=${str:-expr}var=exprvar=exprvar=$str
var=${str+expr}var=var=exprvar=expr
var=${str:+expr}var=var=var=expr
var=${str=expr}str=expr

var=expr
str 不变

var=
str 不变

var=$str
var=${str:=expr}str=expr

var=expr
str=expr

var=expr
str 不变

var=$str
var=${str?expr}expr 输出至 stderrvar=var=$str
var=${str:?expr}expr 输出至 stderrexpr 输出至 stderrvar=$str
[b]历史命令:history
[/b]

[root@www ~]# history

[root@www ~]# history [-c]
[root@www ~]# history [-raw] histfiles
选项与参数:
n   :数字,意思是『要列出最近的 n 笔命令行表』的意思!
-c  :将目前的 shell 中的所有 history 内容全部消除
-a  :将目前新增的 history 命令新增入 histfiles 中,若没有加 histfiles ,
则默认写入 ~/.bash_history
-r  :将 histfiles 的内容读到目前这个 shell 的 history 记忆中;
-w  :将目前的 history 记忆内容写入 histfiles 中!


bash 的进站与欢迎信息: /etc/issue, /etc/motd

[b]bash 的环境配置文件[/b]

login shell:取得 bash 时需要完整的登陆流程的,就称为 login shell。举例来说,你要由 tty1 ~ tty6 登陆,需要输入用户的账号与密码,此时取得的 bash 就称为『 login shell 』啰;

non-login shell:取得 bash 接口的方法不需要重复登陆的举动,举例来说,(1)你以 X window 登陆 Linux 后, 再以 X 的图形化接口启动终端机,此时那个终端接口并没有需要再次的输入账号与密码,那个 bash 的环境就称为 non-login shell了。(2)你在原本的 bash 环境下再次下达 bash 这个命令,同样的也没有输入账号密码, 那第二个 bash (子程序) 也是
non-login shell 。

一般来说,login shell 其实只会读取这两个配置文件:
/etc/profile:这是系统整体的配置,你最好不要修改这个文件;
~/.bash_profile 或 ~/.bash_login 或 ~/.profile:属于使用者个人配置,你要改自己的数据,就写入这里!
bash 的 login shell 情况下所读取的整体环境配置文件其实只有 /etc/profile,但是 /etc/profile 还会呼叫出其他的配置文件:

/etc/inputrc/etc/profile.d/*.sh/etc/sysconfig/i18n

个人配置文件~/.bash_profile
(login shell 才会读):


~/.bash_profile
~/.bash_login
~/.profile
其实 bash 的 login shell 配置只会读取上面三个文件的其中一个, 而读取的顺序则是依照上面的顺序。



source :读入环境配置文件的命令

[root@www ~]# source 配置文件档名

范例:将家目录的 ~/.bashrc 的配置读入目前的 bash 环境中
[root@www ~]# source ~/.bashrc  <==底下这两个命令是一样的!
[root@www ~]#  .  ~/.bashrc


利用 source 或小数点 (.) 都可以将配置文件的内容读进来目前的 shell 环境中! 举例来说,我修改了 ~/.bashrc ,那么不需要注销,立即以 source ~/.bashrc 就可以将刚刚最新配置的内容读进来目前的环境中!

~/.bashrc (non-login shell 会读)
谈完了 login shell 后,那么 non-login shell 这种非登陆情况取得 bash 操作接口的环境配置文件又是什么? 当你取得 non-login shell 时,该 bash 配置文件仅会读取 ~/.bashrc 而已!

其他相关配置文件

[b]/etc/man.config
[/b]
[b]『规范了使用 man 的时候,
man page 的路径到哪里去寻找!
[/b]
~/.bash_history

历史命令就记录在这里

[b]~/.bash_logout
[/b]
『当我注销
bash 后,系统再帮我做完什么动作后才离开』



[b]终端机的环境配置:
stty, set

[/b]


[b]通配符与特殊符号
[/b]

符号意义
*代表『 0 个到无穷多个』任意字符
?代表『一定有一个』任意字符
[ ]同样代表『一定有一个在括号内』的字符(非任意字符)。例如 [abcd] 代表『一定有一个字符, 可能是 a, b, c, d 这四个任何一个』
[ - ]若有减号在中括号内时,代表『在编码顺序内的所有字符』。例如 [0-9] 代表 0 到 9 之间的所有数字,因为数字的语系编码是连续的!
[^ ]若中括号内的第一个字符为指数符号 (^) ,那表示『反向选择』,例如 [^abc] 代表 一定有一个字符,只要是非 a, b, c 的其他字符就接受的意思。
[b]bash
环境中的特殊符号
[/b]

符号内容
#批注符号:这个最常被使用在 script 当中,视为说明!在后的数据均不运行
\跳脱符号:将『特殊字符或通配符』还原成一般字符
|管线 (pipe):分隔两个管线命令的界定(后两节介绍);
;连续命令下达分隔符:连续性命令的界定 (注意!与管线命令并不相同)
~用户的家目录
$取用变量前导符:亦即是变量之前需要加的变量取代值
&工作控制 (job control):将命令变成背景下工作
!逻辑运算意义上的『非』 not 的意思!
/目录符号:路径分隔的符号
>, >>数据流重导向:输出导向,分别是『取代』与『累加』
<, <<数据流重导向:输入导向 (这两个留待下节介绍)
' '单引号,不具有变量置换的功能
" "具有变量置换的功能!
` `两个『 ` 』中间为可以先运行的命令,亦可使用 $( )
( )在中间为子 shell 的起始与结束
{ }在中间为命令区块的组合!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  bash LINUX login shell
相关文章推荐