首页 » Bash

Bash实用操作

简单的日常操作

计算字符串长度:

$ expr length "98H42597Y9200405M"
17

批量修改文件名

目标:进行这样的转换:

libs/mail_xxx.php
=>
libs/emails/xxx.php

Bash命令如下:

$ for f in $(ls libs/mail_*); do mv $f libs/emails${f/libs\/mail_//}; done;

解析。首先是列出所有的目标文件:

$(ls libs/mail_*)

并把它放到for循环中,作为迭代对象:

for f in $(ls libs/mail_*)

Bash的for循环其实质是foreach,它的形式如下:

$ for i in 1 2 3; do echo $i; done;     
$ for i in {1..3}; do echo $i; done; 
$ for (( i=1; i<4; ++i )); do echo $i; done;

随后,在foreach中对目标文件进行重命名:

mv $f libs/emails${f/libs\/mail_//}

其关键是Bash的字符串替换操作(string replacement),它的形式如下:

${string/pattern/replacement}   # replace only first match
${string//pattern/replacement}  # replace all the matches

例如:

$ descr="Learn Linux - Linux Sockect - Linux Thread"
$ echo ${descr/Linux/BSD}
Learn BSD - Linux Sockect - Linux Thread
$ echo ${descr//Linux/BSD}
Learn BSD - BSD Sockect - BSD Thread

因此以下语句将"libs/mail_"子串删除,并在前面添加了"libs/emails":

libs/emails${f/libs\/mail_//}

Bash扩展

bash-completion

Bash环境下的TAB能自动补全命令等,但有些时候却无法按你想象的进行,如想找Apache管理命令的帮助,但记不清了:

$ man apa<TAB>

关键时候Bash无动于衷了。因此我们需要更好的补全方案。bash 2.05之后的版本提供了自动补齐的编程接口,当然我们不必自己编程了,下载bash-completion即可,它可以补齐几乎任何内容:

# yum install bash-completion

在~/.bashrc中添加一句(默认被安装到了/etc/bash_completion):

if [ -f /etc/bash_completion ]; then
    bash /etc/bash_completion
fi

运行~/.bashrc即可:

$ . ~/.bashrc
$ man apa<TAB>

分享

0