【转】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
$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#!/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