Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2263282
  • 博文数量: 168
  • 博客积分: 6641
  • 博客等级: 准将
  • 技术积分: 1996
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-02 11:49
文章存档

2020年(4)

2019年(6)

2017年(1)

2016年(3)

2015年(3)

2014年(8)

2013年(2)

2012年(12)

2011年(19)

2010年(10)

2009年(3)

2008年(17)

2007年(80)

分类: LINUX

2007-12-21 11:44:58

Bash Shell小知识点数则备忘

2007-12-21  TsengYia#126.com 一路狂笑

################################################################
系统环境:RHEL5 [ 2.6.18-8.el5xen ]
软件环境:bash-3.1-16.1
################################################################

1、设置bash静默超时时间
    设置环境变量TMOUT=300,则5分钟没有接受输入即自动退出(auto-logout)当前shell

2、波浪号“~”扩展
    “~”符号后跟用户名,表示引用指定用户名的宿主目录名;若不指定用户名,默认引用当前用户主目录(即$HOME)
    “~”符号后跟“-”号,表示引用前一个目录名(即$OLDPWD)
    “~”符号后跟“+”号,表示引用当前目录名(即$PWD)
    示例:
    [root@localhost ~]# echo ~jerry
        /home/jerry
        [root@localhost ~]# echo ~
        /root
        [root@localhost ~]# cd /boot/grub
        [root@localhost grub]# echo ~+
        /boot/grub
        [root@localhost grub]# echo ~-
        /root

3、关闭bash的通配符扩展(*?[]等)
    使用set -f命令设置,可以禁用通配符扩展,*?[]等作为普通字符处理。(使用set +f可以重新启用通配符扩展)
    示例:
        [root@localhost dir]# ls *
        file1.txt
        [root@localhost dir]# set -f
        [root@localhost dir]# ls *
        ls: *: No such file or directory
        [root@localhost dir]# touch *abc.txt
        [root@localhost dir]# set +f
        [root@localhost dir]# ls *
        *abc.txt  file1.txt

4、命令替换
    使用$(CMD_LINE)或`CMD_LINE`进行命令替换。需要进行嵌套使用时,前者比较方便。
    示例:
        [root@localhost ~]# ll `which cal`        //查找cal命令的位置并显示文件属性
        [root@localhost ~]# A=$(ll $(which cal))        //将上条命令结果赋值给变量A
        [root@localhost ~]# echo $A
        -rwxr-xr-x 1 root root 1302 Jan 12 2007 /usr/bin/cal

5、grep几小点用法
    示例:
        [root@localhost ~]# grep '\' /usr/share/dict/words        //检索包含以con开头、th结尾的单词的行
        [root@localhost ~]# grep -v ^# /boot/grub/grub.conf | grep -v ^$        //检索非#号开头的行,摒弃空行
        [root@localhost dir]# grep -w bin /etc/passwd        //检索包含独立的'bin'单词的行(不包括类似sbin、bind的词)

6、sed几小点用法
    示例:
        [root@localhost ~]# sed -e 's/^/#/' /etc/hosts      //在每行行首插入#号,输出到屏幕
        [root@localhost ~]# sed -e 's/$/EOF/' /etc/hosts      //在每行行尾插入EOF字符串,输出到屏幕
        [root@localhost ~]# sed -i 's/Vlan/VLAN/g' /etc/somefile      //直接将文件中的Vlan改为VLAN,-i选项表示直接修改文件

7、使用read限时读入字符变量,无需回车确认
    示例:
        [root@localhost ~]# read -p "Press any key or wait 10 seconds to continue..." -st 10 -n 1 CHAR
                //按任意键或等待10秒后继续,-p显示提示信息,-s不回显输入字符,-t指定超时时间,-n指定读入的字符数

8、字符串变量的几个小用法
    示例1:
        [root@localhost ~]# echo ${NAME:="jerry"}        //若变量NAME存在则显示内容,否则新建该变量并赋初值为"jerry"
    示例2:
        [root@localhost ~]# STRING="GoodMorningEverybody"
        [root@localhost ~]# echo ${#STRING}        //查看字符串变量STRING的长度
        20
        [root@localhost ~]# echo ${STRING:4}        //删除字符串变量STRING的前4个字符,保留其余部分字符
        MorningEverybody
        [root@localhost ~]# echo ${STRING:4:7}        //删除字符串变量的前4个字符,保留之后的7个字符长度的内容
        Morning
        [root@localhost ~]# echo ${STRING/Mor/Eve}        //将字符串变量STRING中的第一个"Mor"替换为"Eve"
        GoodEveningEverybody
        [root@localhost ~]# echo ${STRING//o/XX}        //将字符串变量STRING中所有的"o"替换为"XX"
        GXXXXdMXXrningEverybXXdy
    示例3:
        [root@localhost ~]# echo $STRING
        GoodMorningEverybody
        [root@localhost ~]# expr substr $STRING 5 7        //从字符串变量STRING中的第5个字符开始截取7个字符长度的内容
        Morning
        [root@localhost ~]# echo $STRING | cut -b 5-11        //截取第5-11个字符,截取不同范围可使用"5"、"5-"、"-11"等形式
        Morning

9、数组变量的赋值与引用
    示例1:
        [root@localhost ~]# declare -a SEASON        //多数时候不需要此项声明,直接赋值为数组即可

        [root@localhost ~]# SEASON=("Spring" "Summer" "Autumn" "Winter")        //给整个数组赋值
        [root@localhost ~]# set | grep SEASON        //查看已设置的数组信息(下标从0开始)
        SEASON=([0]="New_Spring" [1]="Summer" [2]="Autumn" [3]="Winter")
        [root@localhost ~]# echo ${SEASON[*]}        //显示整个数组的内容
        Spring Summer Autumn Winter
        [root@localhost ~]# echo ${SEASON[3]}        //显示指定的单个数组元素
        Winter
        [root@localhost ~]# SEASON[0]="New_Spring"        //给单个数组元素赋值
        [root@localhost ~]# echo ${SEASON[*]}        //显示整个数组
        New_Spring Summer Autumn Winter
        [root@localhost ~]# unset SEASON[2]        //清除指定的单个数组元素
        [root@localhost ~]# unset SEASON        //清除整个数组

    示例2:
        [root@localhost ~]# cat /etc/shells | tr "\n" " " > /tmp/tmp.file        //将文件中的回车转换成空格
        [root@localhost ~]# read -a SHELLS < /tmp/tmp.file        //以文件中内容给数组赋值(碰到第一个回车符之前的内容)
        [root@localhost ~]# set | grep "SHELLS"        //查看数组赋值情况
        SHELLS=([0]="/bin/sh" [1]="/bin/bash" [2]="/sbin/nologin" [3]="/bin/tcsh" [4]="/bin/csh" [5]="/bin/ksh")
阅读(1619) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~