Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29336296
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类:

2009-12-08 07:58:16

1、主要的shell命令
who mv rm wc ls cat date at lpr rsh more awk
pwd bc vi finger w pg find cc cp dd grep ksh sh
ps sed cal lp
2、grep家族
含义就是:全局搜索正则表达式并打印该行!
grep的选项
-b    在各行之前放置它发现的块号。
-c    显示匹配行数而不是内容
-h    不显示文件名
-I    在座比较时忽略字母大小写
-n    文件中每行之前给出它的相关行号
-S    无声操作
-v    把搜索翻转为只显示不匹配的行
-W    把表达式当作一性来搜索。相当于用\<和\>括起来。
如果操作成功返回0 如果模式没找到状态是1
如果文件没找到状态是2
如果操作被取消则状态为130
示例:
grep '^[we]' picnic    其中的格式为grep 模式  对象
其中的模式为正则表达式的模式了!
ls -l | grep '^-'    还可以支持管道的方式进行匹配处理的。即前面的输出丢到后面去匹配输出来!
grep -c 'lover' picnic    还可以带上选择项。-c表示的是匹配的行数!
egrep 表示的是扩展的grep。    就是说这个东西能够支持更多的正则表达式的!

常用的操作集合
1、查看shell版本 echo $SHELL
2、将一个shell脚本设置成可执行的
chmod +x filename
方法二、shell 名+要执行的脚本

shell基本语法
输入输出重定向
> 和 <
>> 和 <<
command >file  :将命令的输出结果重定向到一个文件
command>&file:    将命令的标准错误输出一起重定向到一个文件
command>>file:    将标准输出的结果追加到文件中
command>>&file:    将标准输出的结果,标准的错误输出的结果追加到文件中
shell的变量
环境变量
HOME    保存注册目录的完全路径名。
PATH    保存用冒号分隔的目录路径名。
TERM    终端的类型
UID    当前用户的标识符,取值是由数字构成的字符串
PWD    当前工作目录的绝对路径名
PS1    主提示符。缺省的主提示符是#  在普通用户下主提示符是$
PS2    
预定义的变量
所有的预定义变量都由$符与另一个符号组成
$#    位置参数的数量
$*    所有位置参数的内容
$?    命令执行后返回的状态
$$    当前进程的时程号
$!    后台运行的最后一个进程号
$0    当前执行的进程名
能够直接在shell里面输入echo $$

shell变量
用户定义的变量
变量名 = 变量值
declare[-afirx] 变量名 = 变量值
变量名前不加$号(PHP里面则是要的!)只有在引用的时候才需要加上!
abc= "abc"            (要注意一下在shell里面的空格是非常忌讳的。如果有空格要千万小心呀!!!)
echo $abc

全部的预定义变量组成是$与另一个符号组成
比如说如下:
$#: 位置参数的数量
$*: 所有位置参数的内容
$?  命令执行后返回的状态
$$  当前进程的进程号
$!  后台运行的最后一个进程号
$0  当前执行的进程名

建议所有的变量名都使用大写字母表示
变量的只读性:readly 变量名
整个shell使用变量
export 变量名 (相当于rpyc里面的export方法一样)

shell位置参数
$1    $2    $3
其中的$0是一个特殊的变量。它的内容是当前这个shell程序的文件名

参数置换的变量
方便用户根据不同的条件来给变量赋不同的值。
情况如下:
a. 变量=${参数-word}  如果设置了参数,则用参数的值置换变量的值。否则就用word置换

b. 变量=${参数=word}  如果设置了参数,则用参数的值置换变量的值。
否则把变量设置成word然后再用word替换参数的值。
c. 变量=${参数?word}  如果设置了参数。则用参数的值置换变量的值。否则就显示word并从shell中退出!
这种方式常用于出错指示的!
d. 变量=${参数+word}    如果设置了参数,则用word置换变量,否则不进行置换

shell特殊符号使用
shell使用两种引号和反斜线
双引号
这个与PHP一样的。如果使用了双引号的话就可以在里面使用变量了
param="hello$vari"
如果在变量的值里面有其他的变量值就只能使用双引号了!

反斜线


shell逻辑判断与运算
逻辑判断
1、文件与目录
-f    文件是否存在
-d    目录是否存在
-b    是否为block文件
-c    是否为character文件
-S    是否为socket文件
-L    是否为symbolic link文件
-e    是否存在!
2. 程序
-G    是否由GID所执行的程序所拥有
-O    是否由UID所执行的程序所拥有
3. 文件属性
-r    是否为可读属性
-W    是否为可写入属性
-x    是否为可执行的属性
-s    是否为非空白文件
-u    是否具有SUID的属性
-g    是否具有SGID的属性
4. 两个文件之间的对比
-nt    第一个文件比第二个文件新
-ot    第一个文件比第二个文件旧
-ef    第一个文件与第二个文件为同一文件

运算
=    等于
!=    不等于
<    小于
>    大于
-eq    等于
-ne    不等于
-lt    小于
-gt    大于
-le    小于或等于
-ge    大于或等于
-a    双方都成立(and)
-o    单方成立(or)
-z    空字符串
-n    非空字符串


逻辑判断与运算举例
if [-d $file]      原来那些上面的这个操作是这样处理的呀!
then
    echo "$file is a direcotry"
elif [-f $file]
then
    if [-r $file -a -w $file -a -x $file]
    then
        echo "you have r-w-x permission on $file"
    fi
else
    echo "$file is neither a file nor a directory"
fi

shell编程的流程控制
test测试命令
1》数值测试
-eq: 等于则为真
-ne: 不等于则为真
-gt: 大于则为真
-ge: 大于等于则为真
-lt: 小于则为真
-le: 小于等于则为真

2》字符串测试
=: 等于则为真
!=: 不等则为真
-z字符串:字符串长度伪则为真
-n字符串:字符串长度不伪则为真

3》文件测试
-e文件名:如果文件存在则为真
-r文件名:如果文件存在肯可读则为真
-w文件名:如果文件存在且可写则为真
-x文件名:如果文件存在且可执行为真
-s文件名:如果文件存在且至少有一个字符则为真
-d文件名:如果文件存在且为目录则为真
-f文件名:如果文件存在且为普通文件则为真
-c文件名:如果文件存在且为字符型特殊文件则为真
-b文件名:如果文件存在且为块特殊文件则为真


shell编程的流程控制
1》if 条件语句    条件语句判断格式!
所有的shell都支持if - then - else
fi 用于结束if语句
elif

格式:
if 测试条件
then
    
elif 测试条件
then

if

2》case条件语句
举例:
case $1 in
     -i)
     count='grep ^i$2|wc-l'
     echo ""
     -e)
     count='grep ^e $2 | wc -l'
     echo "dasf"
     ;;
     *)
     echo 'that is'
     ;;
 esac

 循环
 for循环语句
 对一个变量的可能的值都执行一个命令序列。赋给变量的几个数值既可以在程序内以数值列表的形式提供
 也可以在程序以外位置参数的形式提供
 举例:
 for file
 do
 tr a-z A-Z < $file>$file.caps
 done

 while循环控制语句
 举例:
 count = 1
 while[-n "$*"]
 do
    echo "this is parameter number $count$1"
    shift
    count='expr $count+1'
 done
 
 until循环控制语句
 语法 与while语句非常相似的。在所提供的条件表达式为假时执行某代码块

 其他的重复语句select和repeat
 无条件控制 break与continue

 shell函数
 upper(){
    shift
    for I
    do
        tr a-z A-Z < $1 >$1.out
        rm $1
        mv $1.out $1
        shift
    done;
    }
命令分组
()
{}
如果要真正使用这些的时候就可以使用\进行转义处理了!

信号捕捉
trap 命令用于在shell程序中捕捉到信号
之后可以有三种反应方式
shell的调试处理
几个常用的选择项是:
bash -选择项 shell程序文件名
几个常用的选择项为:
    -e: 如果一个命令失败就立即退出
    -n: 读入命令但是不执行它们
    -u: 置换时把未设置的变量看作出错
    -v: 当读入shell输入行时把它们显示出来
    -x: 执行命令时把命令和它们的参数显示出来。
常用的内部命令
1 echo
echo arg 功能:在屏幕上打印由arg指定的字符串
2 eval
当shell执行到eval语句时,shell会读入args,并将它们组合成一个新的命令然后执行。
3 exec
exec 命令 命令参数
当shell执行到exec语句时 直接去执行指定的命令。
4 export
export 变量名或:export变量名=变量值
用export把它的变量向下带入子shell从而让子进程继承父进程中的环境变量。
但是子shell不能用export把它的变量向上带入父shell
5 readonly
命令格式:readonly 变量名
将一个用户定义的shell变量标识为不可变的。
6 read
命令格式:read 变量名表
从标准输入设备读入一行,分解成若干字 赋给shell程序内部定义的变量。







 
阅读(1326) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

hkebao2009-12-09 08:44:20

大家要注意在shell里面的空格符的使用如果不正确的话会出现错误的。比如说下面的示例 if [-x "$myPath" ];then 这里面的[-x 之间没有空格符 这样就会有错误了。 同样的大家在定义变量的时候也一定要千万注意了像这样的定义变量 variable = "abc" 会出错的 正确的写法是 variable="abc" 不能有分隔符。与写IF判断不一样的呀!