GB |BIG5
|
| 首頁 > 編程技術 > C/C++ > 正文 |
 |
| Unix編程/應用問答中文版 ---20.shell script問題 |
| 本文出自:http://www.nsfocus.com 維護:小四 (2002-11-15 11:20:03) |
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 $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: 小四 <cloudsky@263.net>
如果要處理整個目錄樹的話,可以這樣
find <target_dir> -exec sh -c 'mv -f "$0" `echo "$0" | tr "[A-Z]" "[a-z]"` > /de
v/null 2>&1' {} \;
同理,將小寫文件名轉換為大寫文件名如下
find <target_dir> -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> <target_directory>
#
# 第二形參必須是目錄,第一形參指定-l或-u
#
if [ $# -ne 2 ] ; then
echo "Usage: ${0} <-l | -u> <target_directory>"
exit 1
fi
if [ ! -d ${2} -o "${1}" != "-l" -a "${1}" != "-u" ] ; then
echo "Usage: ${0} <-l | -u> <target_directory>"
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.fanqiang.com)
進入【UNIX論壇】
|
|
| 相關文章 |
|
|
|
|
 |
★ 樊強制作 歡迎分享 ★ |