SHELL脚本编程配置环境

                                                     作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 
 
 
一.bash如何展开命令行
1>.bash的优先级
  把命令行分成单个命令词
  展开别名
  展开大括号的声明({})
  展开波浪符声明(
~
  命令替换$() 和 ``)
  再次把命令行分成命令词
  展开文件通配(
*、?、[abc]等等)
  准备I
/0重导向(<、>
  运行命令
2>.反斜线(\)会使随后的字符按原意解释
[root@node101.yinzhengjie.org.cn ~]# echo Your cost:\$15.00
Your cost:$15.00
[root@node101.yinzhengjie.org.cn ~]# 
3>.加引号来防止扩展
    单引号('')防止所有扩展

    双引号("")也可防止扩展,但是以下情况例外:
    $(美元符号):
      变量扩展     ` `(反引号):
      命令替换     \(反斜线):
      禁止单个字符扩展     !(
叹号):
      历史命令替换

 

二.bash的配置文件
按生效范围划分,存在两类:
  全局配置:
    /etc/profile
    /etc/profile.d/*.sh
    /etc/bashrc
  个人配置:
    ~/.bash_profile
    ~/.bashrc
 
三.shell登录两种方式
交互式登录:
  (1)直接通过终端输入账号密码登录
  (2)使用"su -l UserName"切换的用户
  执行顺序:/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

非交互式登录:
  (1)使用"su UserName"切换的用户
  (2)图形界面下打开的终端
  (3)执行脚本
  (4)任何其它的bash实例
  执行顺序: /etc/profile.d/*.sh --> /etc/bashrc -->~/.bashrc
 
四.Profile类和Bashrc类
按功能划分,存在两类:
  即profile类和bashrc类

profile类:为交互式登录的shell提供配置
  全局:
    /etc/profile, /etc/profile.d/*.sh
  个人:
    ~/.bash_profile
  作用:
    (1)用于定义环境变量
    (2)运行命令或脚本

bashrc类:为非交互式和交互式登录的shell提供配置
  全局:
    /etc/bashrc
  个人:
    ~/.bashrc
  作用:
    (1)定义命令别名和函数
    (2)定义本地变量

  修改profile和bashrc文件后需生效
    两种方法:
      (1)重新启动shell进程
      (2)使用"."或"source"
    例:
      [root@node101.yinzhengjie.org.cn ~]# . ~/.bashrc 
      [root@node101.yinzhengjie.org.cn ~]# 
      [root@node101.yinzhengjie.org.cn ~]# source ~/.bashrc
 
五.Bash退出任务
  保存在~/.bash_logout文件中(用户)

  在退出登录shell时运行

  用于"创建自动备份"或者"清除临时文件"。
 
六.set 命令
1>."$-"变量
h:
  hashall,打开这个选项后,Shell 会将命令所在的路径hash下来,避免每次都要查询。通过set +h将h选项关闭 i:
  interactive
-comments,包含这个选项说明当前的 shell 是一个交互式的 shell。所谓的交互式shell,在脚本中,i选项是关闭的。 m:
  monitor,打开监控模式,就可以通过Job control来控制进程的停止、继续,后台或者前台执行等。 B:
  braceexpand,大括号扩展 H:
  history,H选项打开,可以展开历史列表中的命令,可以通过
!感叹号来完成,例如“!!”返回上最近的一个历史命令,“!n”返回第 n 个历史命令
[root@node101.yinzhengjie.org.cn ~]# echo $-
himBH
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# hash 
hits    command
   1    /usr/bin/ls
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# set +h
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo $-
imBH
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# hash 
-bash: hash: hashing disabled
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# set -h
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo $-
himBH
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# hash 
hits    command
   1    /usr/bin/ls
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# 
"h"使用案例
[root@node101.yinzhengjie.org.cn ~]# echo $-
himBH
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo {a..z}        #支持大括号扩展功能
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# set +B           #禁用大括号功能
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo $-          
himH
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# echo {a..z}        #发现禁用大括号功能后,只能原样输出啦~
{a..z}
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# 
"B"使用案例

相关文章: