【转】shell总结

转自:乔部落格

Shell元字符

元字符含义
>将标准输出重定向到文件
>>将标准输出附加到文件
<从文件中获取标准输入
``
<<串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

Shell内部变量

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

注:( $*$@ 区别)

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

Shell变量的赋值

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