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 <iva@racoon.riga.lv>
expr `echo | wc -c` - 1
echo | awk '{ print length( /usr/local/publish/cgi-bin/publish/doc_publish.pl ); }'
/usr/ucb/expr length ""
expr "" : ".*"
echo "" | sed 's/./1+/g;s/+/ /;s/
p/' | dc
A: http://www.linuxforum.net
假设是bash
='1234567890'
10
501br>
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:|SINA>DOUBLE_QUOTATION
read key
if [ "" = "" ] ; then
echo "
You press Enter or timeout"
break
else
echo "You press the key "
fi
done
stty sane
--------------------------------------------------------------------------
20.4 BASH中如何得到一个字符串的子串
A: loginlog@SMTH
BASH 2.0.3 以上版本
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: 小四 <cloudsky@263.net>
如果要处理整个目录树的话,可以这样
find <target_dir> -exec sh -c 'mv -f "/usr/local/publish/cgi-bin/publish/doc_publish.pl" `echo "/usr/local/publish/cgi-bin/publish/doc_publish.pl" | tr "[A-Z]" "[a-z]"` > /de
v/null 2>&1' ;
同理,将小写文件名转换为大写文件名如下
find <target_dir> -exec sh -c 'mv -f "/usr/local/publish/cgi-bin/publish/doc_publish.pl" `echo "/usr/local/publish/cgi-bin/publish/doc_publish.pl" | 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> <target_directory>
#
# 第二形参必须是目录,第一形参指定-l或-u
#
if [ # -ne 2 ] ; then
echo "Usage: UNKNOW <-l | -u> <target_directory>"
exit 1
fi
if [ ! -d -o "" != "-l" -a "" != "-u" ] ; then
echo "Usage: UNKNOW <-l | -u> <target_directory>"
exit 1
fi
exec 1>/dev/null 2>&1
dir=`dirname ""`
cd
if [ "" = "-l" ] ; then
base=`basename "" | tr "[A-Z]" "[a-z]"`
else
base=`basename "" | tr "[a-z]" "[A-Z]"`
fi
mv -f "`basename `" ""
for entry in `find `
do
before="."
#
# 这个办法依赖for in语法,用空格做分隔符,所以不能处理那些本身名字带空
# 格的目录项,属于小BUG
#
for after in `echo "" | sed -e 's,/, ,g'`
do
tmp_entry="/"
if [ "" = "-l" ] ; then
before=`echo "" | tr "[A-Z]" "[a-z]"`
else
before=`echo "" | tr "[a-z]" "[A-Z]"`
fi
mv -f "" ""
done
done
--------------------------------------------------------------------------
|