星期五, 十月 27, 2006

摘录:Bash中对变量的操作&特殊字符

Bash中对变量的操作 原文
本文出自:http://www.ytht.org 作者:chenhao (2001-10-29 07:00:00)

1.条件变量替换:
Bash Shell可以进行变量的条件替换,既只有某种条件发生时才进行替换,替换
条件放在{}中.
(1) ${value:-word}
当变量未定义或者值为空时,返回值为word的内容,否则返回变量的值.
(2) ${value:=word}
与前者类似,只是若变量未定义或者值为空时,在返回word的值的同时将
word赋值给value
(3) ${value:?message}
若变量以赋值的话,正常替换.否则将消息message送到标准错误输出(若
此替换出现在Shell程序中,那么该程序将终止运行)
(4) ${value:+word}
若变量以赋值的话,其值才用word替换,否则不进行任何替换
(5) ${value:offset}
${value:offset:length}
从变量中提取子串,这里offset和length可以是算术表达式.
(6) ${#value}
变量的字符个数
(7) ${value#pattern}
${value##pattern}
去掉value中与pattern相匹配的部分,条件是value的开头与pattern相匹配
#与##的区别在于一个是最短匹配模式,一个是最长匹配模式.
(8) ${value%pattern}
${value%%pattern}
于(7)类似,只是是从value的尾部于pattern相匹配,%与%%的区别与#与##一样
(9) ${value/pattern/string}
${value//pattern/string}
进行变量内容的替换,把与pattern匹配的部分替换为string的内容,/与//的区
别与上同

注意:上述条件变量替换中,除(2)外,其余均不影响变量本身的值


2.变量的算术运算
在Bash Shell中,只能进行两个整数间的运算,其结果仍为整数.要进行算术
运算,需要使用let命令,语法为:
let expr
expr是一个包含项和操作符的表达式,项可以是一个变量或是一个整数常数,
当使用整数常数时,其默认为十进制整数,用户可以用radio#number来指定其它
形式的整数,其中radio定义了整数是几进制表示的,number是该整数的值.若
radio>10,那么数字字符可从0-9和A-Z.
在表达式中支持的操作符及其含义为:
+,-,*,/,% 加,减,乘,除,取模
>>,<<,&,^,| 左移,右移,位与,位异或,位或
?: 三元运算符.与C语言中的定义一致
~ 取补码
!,>=,<=,>,<,==,!=,&&,||
=,+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=
表达式式中也可以使用括号.括号或运算优先级的定义与一般计算机语言中的
相同.
let命令具有返回值.当计算结果(若有多个表达式时,以最后一个为准)为0时,
返回值为1,否则为0.
当表达式中含有shell的特殊字符(如|)时,需要用引用符('或")将其引用起来.
使用let时还需要注意的时,对于let x+y这样的式子,shell虽然计算了x+y的值
但却将结果丢弃,若不想这样,可以使用let sum=x+y将x+y的结果保存在变量sum中
另外还可以使用((和))操作符取代let命令,而且这样的话,还可以省去对算术
表达式的引用,如果想返回表达式的值,则需用$(())的格式.

Bash中的特殊字符

Bash中的特殊字符 本文出自:http://www.ytht.org 作者:chenhao (2001-10-28 13:05:01)
1.通配符
* 匹配任何长度的任何串
? 匹配单个字符
[...] 匹配单个括号内的字符,[]中的-,!具有特殊含义,如:
$ echo [a-z]*
显示首字母在a-z范围内的文件或目录名
$ echo [a,b]*
显示首字母为a或b的文件或目录名
$ echo [!a]*
显示首字母不为a的文件或目录名(使用!时,!必须是[后的第一个字符)
!还可与-和,一起使用

在Bash 2.0以后的版本中,若用shopt打开了extglob选项(shopt -s extglob),
那么还可以扩展的模式表达式(模式表达式是指那些包含了一个或多个shell通配
符的字):
*(pattern [|pattern] ...) 匹配模式的零次或多次出现
+(pattern [|pattern] ...) 匹配模式的一次或多次出现
@(pattern [|pattern] ...) 匹配模式的一次出现
?(pattern [|pattern] ...) 匹配任何一个模式.与*不同的是它不匹配
多个模式或模式的重复出现
!(pattern [|pattern] ...) 与?类似,不过是不包括指定模式的串
应该注意到,模式表达式的定义是递归的,每个表达式都可以包含一个或多个
模式,而且模式表达式也是可以嵌套的.

2.数据或程序控制使用的特殊字符:
主要有:
< (file) 输出重定向到文件
>> (file) 输出重定向到文件,内容加到已存在的文件尾部
< (file) 输入重定向到文件
; 命令分隔符
| 管道符,把一条命令的输出重定向为另一命令的输入
& 放在命令之后强迫命令在后台执行
`` 命令替换,重定向一条命令的输出为另一命令的参数

3.用于引用和逃逸的特殊字符:
逃逸符\ 表示以后的字符不具有特殊的含义或不是Shell的函数,
除此之外,Bash还可以识别一些C语言中的转义序列,如:
\a 响伶
\b 回退
\e Escape
\n 换行
\r 回车
\t 制表
\v 制表
\\ 反斜线
\nnn 八进制的ASCII编码
\xnnn 十六进制的ASCII编码
但必须以如下方式进行引用:
$'string'
引用符'和" 将特殊字符或由空白分隔的字引用起来组成一个简单字符串
两者区别在与,双引号内的内容可以进行参数和变量替换

怎样通过shell解析文件中的变量
原文
[xyb@linux xyb]$ echo name=xyb > id.txt
[xyb@linux xyb]$ echo age=xx >> id.txt
[xyb@linux xyb]$ eval $(cat id.txt | grep name=)
[xyb@linux xyb]$ eval $(cat id.txt | grep age=)
[xyb@linux xyb]$ echo $name
xyb
[xyb@linux xyb]$ echo $age
xx
[xyb@linux xyb]$

#! /bin/sh
name=`grep -e '^name=' YOURFILE | sed -e 's/^name=//g'`

星期四, 十月 26, 2006

摘录:shell常用指令收集

shell常用指令收集

awk 是一种方便的面向行的文本处理语言。
cat 将指定为参数的文件内容打印到终端。作为管道的第一个命令,这是很方便的,例如,cat foo.txt | blah。
cut 从输入文件或流的每个行上抽取出由字符限定的字段。
expand 将输入制表符转换为空格。使用 -t 选项来指定制表符停止位。
fmt 对段落重新格式化以便在其边缘处进行换行。这个能力被构建到大多数文本编辑器中,但是应知道它仍是一个好工具。
head 打印出文件或流的前十行。使用 -n 选项来指定应显示的行数。
join 与 paste 类似,但它在每个输入行中使用一个字段(缺省情况下是第一个字段)来匹配一在单行上合并的字段。
nl 将行号添加到输入的每个行上。这对于打印输出很有用。
od 将输入流转换为八进制或十六进制的“转储”格式。
paste 获取两个或更多文件作为输入,连接输入文件上的每个后续行,并输出结果行。它对于创建文本的表或列是很有用的。
pr 将文件分解为多个页面的输出;通常用于打印。
sed 是一个功能强大的面向流的文本编辑器。
sort 按字母次序打印在命令行上指定的文件内容。当然,sort 也接受用管道传送的输入。输入 man sort 来熟悉控制排序行为的各种选项。
split 将较大的文件拆分成许多较小、更易处理的块。
csplit 也是拆分文件,和split不同的是,新文件的名字可以用pattern来控制
cat 可以将这些小文件合并为分割前的文件
tac 与 cat 类似,但它以逆向顺序打印所有行,换句话说,先打印最后一行。
tail 打印出文件或流的最后十行。使用 -n 选项来指定应显示的行数。
tee 将它的输入打印到文件和屏幕。当您想创建某些日志记录,但还想在屏幕上看时,这很有用。
tr 是字符转换工具;它用来将输入流中的某些字符映射成输出流中的某些其它字符。
unexpand 将输入空格转换为制表符。使用 -t 选项来指定制表符停止位。
uniq 获取已排序的文件或数据流(通过管道)并除去重复行。
wc 打印出指定文件或输入流(来自管道)中的行、字和字节的数量。输入 man wc 来学习如何精调显示的内容。
cmp -- 判断两个文件内容是否一样。
diff -- 详细输出两个不同文件的差别。
diff3,可以比较三个文件

comm 比较两个排好序的文件
fold 按指定的宽度把文本文件换行
basename 去处前导的目录后的文件或目录名
echo 打印字符串
env 打印环境变量
expr 数学表达式计算
expr 还可以在指定的字符串中查找特定的子串
false 设置返回值为1
true 设置返回值为0
pwd 打印当前目录名
seq 打印指定步进值的数字序列,整数浮点数都可以
sleep 让当前进程休息一会儿
uname 打印一些重要的内核信息
yes 不停打印指定字符串,缺省为y

grep is a very powerful search tool.
find / -name 'linux*' | grep -E 'linux'

echo "" > filename # 创建文件,文件中包含一个空行 echo默认输出一个换行符
echo -n "" >filename # 创建空文件
touch filename # 创建空文件 'touch' changes the timestamp of a file and creates one if it doesn't exist.
cat /dev/null >filename # 创建空文件
> file #创建空文件
cp /dev/null filename #创建空文件



--原文

摘录:在 echo 中控制输出颜色

使用 echo 来向控制台输出指定的颜色

echo -e '\e[44;33;1m colors \e[0m'
在echo输出时使用ESC序列来控制输出的颜色和样式
-e 用来开启echo中的转义
\e 或 \033 来输出Esc符号
设置颜色 \e[4背景色;3前景色;高亮m
Esc[background;foreground;1m
恢复默认 \e[0m
Esc[0m
Foreground colors: 30=black, 31=red, 32=green, 33=yellow, 34=blue 35=purple, 36=turquoise, 37=white
Background colors: 0=transparent, 40=back, 41=red, 42=green, 43=yellow, 44=blue 45=purple, 46=turquoise, 47=white

原文
-- http://www.linuxforum.net/forum/showflat.php?Cat=&Board=vrml&amp;Number=624453&page=0&view=collapsed&sb=5&o=31&fpart=
-- http://www.linuxforum.net/forum/files/345507-colors.txt
如果需要在shell脚本里打印不同颜色的字符,可以使用ESC序列。

echo -e '\e[44;33;1m colors \e[0m'

echo -e表示启用\字符转义;\e即打印ESC控制符;[固定格式;44设置

背景为蓝色;33设置前景为白色;1设置加亮显示;m固定格式;colors

要打印的字符串;\e[0m设回开始的shell环境颜色设置。

连起来就是打印背景蓝色、前景高亮白色的字符串colors。
#! /bin/bash
# show colors (version 2)

FG='30 31 32 33 34 35 36 37'
BG='40 41 42 43 44 45 46 47'

NORMALSTR=' Normal '
BOLDSTR=' Bold '

echo

# Row Title
echo -n " "
for i in $FG ; do
echo -n " ${i} "
done
echo

# Row Title Line
echo -n "== "
for i in $FG ; do
echo -n " ========"
done
echo

# Color Map
for i in $BG ; do
echo -n "${i} "
for j in $FG ; do
echo -ne "\e[${j};${i}m${NORMALSTR}"
done
echo -e '\e[0m'

echo -ne " "
for j in $FG ; do
echo -ne "\e[${j};${i};1m${BOLDSTR}"
done
echo -e '\e[0m'
done

echo

星期日, 十月 22, 2006

转载:Code-flash播放器

Code-flash播放器
转载自穷困潦倒的阿威 http://my.opera.com/shui1220/blog/show.dml/316714

基于Flash的音乐播放器收集

1. Audio Player(官方地址)

名字很直接,就叫音频播放器,呵呵。
2. Dew Player(官方地址)
很漂亮的东东,作者本人就是设计师。
3. Odeo(官方地址)
Odeo本身提供的就是Podcast的服务,这是它们的重要工具之一。另外,你可以不下载这个swf,直接引用该网站上的这个播放器使用。
4. XSPF Web Music Player (官方地址)
这个播放器最大的特点就是支持XSPF格式(有空我会介绍下,Webjay, Yahoo! Music Engine都用它)的音乐播放列表,也就是说,通过它你可以播放多首歌曲。
它还提供多种播放器样式,最小的是Button(播放按钮),其次是Slim(单条),以及Extended(多功能模式)。除了界面一般外,功能上,它算非常的强了,比前面几个都厉害。
5.FMP256 Flash MP3 Player (官方地址)
这个播放器也支持 XSPF格式的播放列表,可以放多首歌。另外,它还有更强大的商业版本,3美元。
6. Easy musicplayer for Flash (EMFF) (官方地址)
非常简洁的作品,出自德国人之手。
7. Mini Mp3 Flash Player(相关链接)
Dew Player很像,但看上去更丑些。
8.爱播播放器(官方地址)
很强大的玩意儿,由爱播网推出。