shell编程Bash中对变量的操作方法谈 |
| 发布时间: 2012/7/7 8:56:28 |
|
呵呵,其实很多东西,在 ksh,甚至是 sh 里就已经存在了的。刚才把我在念大学时发的一个帖子找出来了,贴出来大家参考一下吧。 - ksh中的串编辑命令: ${variable#pattern} 删除匹配variable值头部的pattern的最短部分,返回剩余部分。 ${variable##pattern} 删除匹配variable值头部的pattern的最长部分,返回剩余部分。 ${variable%pattern} 删除匹配variable值尾部的pattern的最短部分,返回剩余部分。 ${variable%%pattern} 删除匹配variable值尾部的pattern的最短部分,返回剩余部分。 其中,pattern可以是文件名通配符。 例如: var=/home/cheyenne/programs/shell/e.f.g ${var} ====> /home/cheyenne/programs/shell/e.f.g ${var#/*/} ====> cheyenne/programs/shell/e.f.g ${var##/*/} ====> e.f.g ${var%.*} ====> /home/cheyenne/programs/shell/e.f ${var%%.*} ====> /home/cheyenne/programs/shell/e ${var%%/*/} ====> /home/cheyenne/programs/shell/e.f.g ${var%%/*} ====> ${var%/sailing*} ====> /home ${var%%/sailing*} ====> /home - 用通配符匹配所有圆点文件: 在Bourne Shell,Korn Shell和bash中,可以用 .[!.]* 来匹配所有的以圆点开头的文件。 在tcsh中,可以用 .[^.]* 来匹配。 解决办法:通过shell设置文件。 dots=".[`echo \\\\001--0-\\\\0177`]*" # sh, ksh, bash set dots=".[`echo Y--0-Z | tr YZ \\001\\117`]" # csh, tcsh - ls命令技巧: -t选项:根据文件的修改时间(ctime)来进行分类,先列出新的文件。 -u选项:显示文件的最后访问时间(atime),但是必须和-t或-l一起使用(单独的 ls -u 命令不起作用)。 -C选项:沿列向下而不是横向排列文件。 -A选项:同-a选项(列出所有文件),但是不包括.和..目录。 -L选项:列出这个链接指向的文件而不是链接本身。 - 不能访问一个文件?====>寻找文件名中的空格: 例如: $ls project exefiles tools $cat project cat: project: No such file or directory 可以试一下这个命令: $ls -l | cat -v -t -e total 89$ -rw-rw-rw- 1 sailing 28 Jan 7 10:00 project $ -rw-r--r-- 1 root 25179 Mar 2 15:00 exefiles$ cat命令的-e选项用一个$来标志行的末尾。project后面的$并没有紧跟文件名,这说明这个文件名是以一个空格结尾的。可以把它改名: $mv 'project ' project ls命令有个-q选项,把空格、TAB等空白字符显示为?。 - 显示文件名中的非打印字符: 例如: $ls ab??cd # 这表示在ab和cd之间有两个非打印字符 若想删除或重命名该文件,可以使用通配符,如 ab??cd。 [注意]有很多时候,可能会生成许多奇怪的文件名,ls命令显示它们是都是以????开始。这时,许多新手会天真地输入 rm ????*…… 可以使用ls命令的-b选项来打印出任何非打印字符的八进制值(前加\)。 $ls -b ab\013\014cd - 巧设文件权限: 在对权限进行测试时,系统会依次检查各个组。若用户权限被拒绝,UNIX就不会再检查下一个组了。那么考虑这样一个情况,某个文件由用户sailing所有,位于组guests中,且有权限-----xrwx(八进制的017)。这会产生这样的结果:用户sailing自己不能使用该文件,组guests中的任何用户都可以执行该程序,且除了sailing和guests之外的任何人都能读、写和执行该程序。 这不是很常见的设置,但可以用类似的机制来拒绝一组用户访问或使用某个文件。 ====> 假设用户在一台计算机上工作,其中有一些私人的、“客人”不能使用的文件。在该机器上工作的其他人应具有访问权。那么,可以把这些文件放到一个名叫deny的组所拥有的目录中,然后用chmod来拒绝对该组的权限: #chmod 705 /dir #ls -lgd /dir drwx---r-x 2 root deny 512 Dec 11 12:00 /dir - 从另一个用户的终端来清除你的屏幕(主要是为了保护显示器): 首先从另一个终端登录或者su到自己的帐号,然后: $who | grep sailing sailing ttyp3 Jan 1 10:00 $clear > /dev/ttyp3 若是在一个不同类型的终端上,那么应先临时设置TERM环境变量。 - tail命令: $tail -n #显示最后n行 $tail +n #抛弃前面的n-1行,给出第n行和它后面的所有内容。 $tail -nb #显示文件的最后n块(n*512个字节)的内容。 $tail -r #以相反的顺序显示文件(从最后一行开始) - wc命令的技巧: $expr `wc -w < file1` - `wc -w < file2` #比较file1中的单词比file2中的多多少 - tr命令的-d和-s选项: $tr -d ",.!?;:'"'"`' < file #从输入中删除所有在字符串中指定的一个或多个字符 $tr -s " " " " < file #删除第二个参数中多次连续出现的相同字符 - sort排序: $sort -f #不区分大写字母和小写字母 $sort -nb +0 #忽略开始的空格(必须指定开始字段,即0) UNIX对数字排序时是把前面额外加有空格的数字排在前面,用上面的命令可以解决这个麻烦。而sort -n命令则不行。 - Bourne Shell的冒号操作符: 1、代替UNIX的true命令来做一个无限while循环的条件: while : do commands done 2、在if中使用else,但又要使then为空(什么都不干)时: if condition then : else commands fi 3、有的Bourne shell版本没有真正的#注释符,可以用冒号来伪装(最好使用引号,比较安全): : 'written by sailing' 4、可用于像${var?}或${var=default}这样的参数替换: : ${USER?} ${HOME?} #在USER或HOME变量没有设置时显示一个错误并退出 本文出自:亿恩科技【www.enkj.com】 |
京公网安备41019702002023号