| 您的位置:首页 > 文档 > 编程技术 > |
文章分类热门文章 |
Unix编程/应用问答中文版 ---20.shell script问题创建:2005-10-26 16:54:03 作者:Unlinux 来自: http://www.Unlinux.com 本文出自:http://www.nsfocus.com 维护:小四 20. shell script问题 20.1 如何获取一个字符串的长度 20.2 读超时自动使用缺省值 20.3 20.4 BASH中如何得到一个字符串的子串 20.5 20.6 20.7 20.8 使用tr命令加密文件 20.9 有哪些命令用于查找定位 20.10 20.11 如何将大写文件名转换为小写文件名 -------------------------------------------------------------------------- 20. shell script问题 20.1 如何获取一个字符串的长度 A: Andrei Ivanov expr `echo $string | wc -c` - 1 echo $string | awk '{ print length( $0 ); }' /usr/ucb/expr length "$string" expr "$string" : ".*" echo "$string" | sed 's/./1+/g;s/+/ /;s/$/p/' | dc A: http://www.linuxforum.net 假设是bash $ string='1234567890' $ echo ${#string} 10 $ 20.2 读超时自动使用缺省值 Q: shell script编程,不介入expect、perl、tcl等类似工具。读等待60秒,超时则 自动使用缺省值。可以使用系统缺省外部命令,要求能广泛移植在常用Unix平台 上 A: CERNET 华中地区网络中心 PUE(UNIX环境程序设计)版 lookout 参看comp.unix.shell新闻组,下面以SPARC/Solaris 2.6为例 -------------------------------------------------------------------------- #! /sbin/sh stty -icanon min 0 time 255 while true do /usr/bin/echo "Press a key or press ENTER to exit:c" read key if [ "$key" = "" ] ; then echo "nYou press Enter or timeout" break else echo "You press the key $key" fi done stty sane -------------------------------------------------------------------------- 20.4 BASH中如何得到一个字符串的子串 A: loginlog@SMTH BASH 2.0.3 以上版本 ${var:offset:length} 20.8 使用tr命令加密文件 A: 水木清华 TheCool 著名的 rot13 密码, 通过把字母移动13个位置实现对文本的加密 tr "[a-m][n-z][A-M][N-Z]" "[n-z][a-m][N-Z][A-M]" < message > newmessage 然后可以用同样的命令进行解密 tr "[a-m][n-z][A-M][N-Z]" "[n-z][a-m][N-Z][A-M]" < newmessage > message 20.9 有哪些命令用于查找定位 A: 小四 type -a telnet whereis telnet which telnet whatis telnet <=> man -k telnet 20.11 如何将大写文件名转换为小写文件名 A: 小四 如果要处理整个目录树的话,可以这样 find -exec sh -c 'mv -f "$0" `echo "$0" | tr "[A-Z]" "[a-z]"` > /de v/null 2>&1' {} ; 同理,将小写文件名转换为大写文件名如下 find -exec sh -c 'mv -f "$0" `echo "$0" | tr "[a-z]" "[A-Z]"` > /de v/null 2>&1' {} ; 这个办法有待修正,处理多层目录名本身带有大写字母的情况,有问题。比如存在如 下目录的时候,./A/B/C/D.txt。 A: Potash@www.linuxforum.net 2002-02-05 18:58 -------------------------------------------------------------------------- #! /bin/sh # Usage: ./loworup.sh <-l | -u> # # 第二形参必须是目录,第一形参指定-l或-u # if [ $# -ne 2 ] ; then echo "Usage: ${0} <-l | -u> " exit 1 fi if [ ! -d ${2} -o "${1}" != "-l" -a "${1}" != "-u" ] ; then echo "Usage: ${0} <-l | -u> " exit 1 fi exec 1>/dev/null 2>&1 dir=`dirname "${2}"` cd ${dir} if [ "${1}" = "-l" ] ; then base=`basename "${2}" | tr "[A-Z]" "[a-z]"` else base=`basename "${2}" | tr "[a-z]" "[A-Z]"` fi mv -f "`basename ${2}`" "${base}" for entry in `find ${base}` do before="." # # 这个办法依赖for in语法,用空格做分隔符,所以不能处理那些本身名字带空 # 格的目录项,属于小BUG # for after in `echo "${entry}" | sed -e 's,/, ,g'` do tmp_entry="${before}/${after}" if [ "${1}" = "-l" ] ; then before=`echo "${tmp_entry}" | tr "[A-Z]" "[a-z]"` else before=`echo "${tmp_entry}" | tr "[a-z]" "[A-Z]"` fi mv -f "${tmp_entry}" "${before}" done done 转载自:http://www.unlinux.com/doc/program/20051026/2436.html 【评论】 【加入收藏夹】 【大 中 小】 【打印】 【关闭】 ※ 相关链接
|