转自:乔部落格

Shell元字符

元字符 含义
> 将标准输出重定向到文件
>> 将标准输出附加到文件
< 从文件中获取标准输入
` ` p1 p2将p1的标准输出作为p2的标准输入
<<串 here文档:标准输入从here文档读入,直到出现串
* 匹配文件名中的零个或多个字符
? 匹配文件名中的任何单个字符
[ccc] 匹配文件名中 ccc范围内的任何字符
; 命令结束符,如p1;p2表示先执行p1,再执行p2
& 与;类似,但不等p1结束
`…` 运行…中的命令,输出结果代替`…`
(…) 在子shell中运行…中的命令
{…} 在当前shell中运行…中的命令
$1, $2等 $0…$9 可代表shell文件的参数
$变量 Shell变量的值
${变量} Shell变量的值,为避免在文本联接时混淆
\ 转义字符,\c 将c字符作为字符
'…' 单引号内表示文字
"…" 中的 $, `…`,和 \ 得到解释后,将 作为文本文字
# 注释
变量=值 为变量赋值
p1&&p2 运行p1;若成功,再运行p2
`p1 p2` 运行p1;若不成功,再运行p2

Shell内部变量

变量 含义
$# 参数个数
$* Shell的所有参数
$@ (注) 类似 $*
$- Shell的选项
$? 上次执行命令的返回值
$$ Shell的pid
$! & 启动的最后一个命令的pid
$HOME Cd命令的默认参数
$IFS 参数分隔符
$PATH 搜索命令的目录表

注:( $*$@ 区别)

  1. $*$@ 扩展为参数,并被重复扫描;参数的空格将字符串分成多个参数。
  2. $* 表示shell文件的所有参数及其空格连在一起作为单个词处理。
  3. $@ 与shell文件接收的参数等价,参数中的空格被忽略,其结果是等同于原来参数的一个单词列表。

Shell变量的赋值

变量 赋值
$var var的值;若var无定义则无值
${var} 同上;用于变量后跟着字母数字串的情况
${var-thing} var有定义时,取值var;否则取值thing,而 $var 的值不变
${var=thing} var有定义时,取值var;否则取值thing,$var 的值设为thing
${var?message} var有定义时,取值var;否则打印message
${var+thing} var有定义时,取值thing;否则无值

>a 或touch a创建文件。

Cat > a 从标准输入获取字符,写入文件a中,按 ctrl-d 结束。

(以上参考《UNIX编程环境》)

为了装软件方便,我写了一个简单的小脚本(我使用yum作为软件包管理者)。

脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash
#program name: pack.sh
if [ $# -eq 0 ]
then
echo “try pach.sh -h for help”
exit 1
fi
case $1 in
“-h”)echo “usage: pack.sh -[suihc] ‘pack’”
echo “-s for search, -u for update, -i for install, -c for check updates”
;;
“-s”)echo “This may take a few minutes, please wait…”
sudo yum list | grep -i $2
;;
“-c”)echo “This may take a few minutes, please wait…”
if [ -z $2 ]
then
sudo yum check-update
else
sudo yum check-update | grep -i $2
fi
;;
“-u”)sudo yum -y update $2
;;
“-i”)sudo yum -y install $2
;;
*)echo “NO such options!try pach.sh -h”
exit 2
;;
esac

留言

2011-02-10
次访问