Shell编程总结

rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"> rel="themeData" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"> rel="colorSchemeMapping" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml">

Shell编程总结

 

Unix中有两种主要类型的Shell:

         Bourne Shell(sh, ksh, bash) : prompt:#

         C Shell (csh ,tcsh) : prompt: %

         如果是root用户 都用#做为提示符

 

内核在计算机引导时被装入内存

Shell在登录时被装入内存

工具在使用时装入内存

 

Shell初始化时要读的两个文件:(用于设置一些变量)

         /etc/profile

         ~/profile

 

要使脚本可执行

         有可执行的权限 chmod a+x

         确保脚本使用正确的Shell    #!/bin/sh(必须在第一行.不然会被当成注释)

 

Unix下分三种基本类型的文件

         普通文件:数据,文本或程序指令

         目录文件

         特殊文件

 

文件名第一个字符为点的是不可见文件,来存储配置信息

         .profile     .cshrc

 

不同文件类型的特殊字符(ls -l)

-          普通文件

l        符号链

c       字符特殊文件

b       块特殊文件

p       命名管道

s       Socket

d       目录文件

 

辨别一个普通文件是二进制程序 Shell脚本 还是库

         file filename

 

设备文件(/dev

         字符特殊文件:每次一次字符与设备通信的机机制

         块特殊文件(块设备):通过文件系统与设备驱动程序通信的机制

 

chmod 八进制方式是设置而不是修改文件的权限

chown:Change Owner

chgrp:Change  group

 

UNIX中无论何时执行一个命令,它都创建或启动一个新进程

启动一个后台进程最简单的方式是在命令的后面添加一个&符号

 

把前台进程移到后台

         susp前台进程(^z

         bg命令使用户能把susp的进程置到后台

         fg命令使用户能把susp的进程置到后台

         缺省情况下,bg命令把最近的悬挂进程移到后台,用户可以一次悬挂多个进程,

                   为区别,在命令行的任务标识号加上%做为前缀

 

后台进程持续运行(nohup

         如果没有重定向文件中,自动重定向到一个叫做nohup.out的文件

         eg: nohup ls > results &

等待后台进程结束(wait命令)

 

jobs命令为用户显示出悬挂的以及正在后台运行的进程

ps显示正在运行的所有进程(process status

         ps –a         显示所有用户的信息

         ps –x         显示没有终端的进程的信息(nohup)

         ps –u         显示额外的信息

 

kill并不物理地杀死进程,它给进程发一个信号,缺省情况下,它发出TERM(15)信号.

如果进程忽略了常规的kill命令 用户可以应用kill -9,以强迫进程结束

 

缺省情况下,一个进程使用运行它的用户的权限

覆盖当前进程: exec

 

变量总是成对出现..没有数据类型的概念..使用空格要引用

访问变量 在变量名之前加上$(类似于PHP)

 

数组变量

name[index]=value   name_index=value

set –A name value1 value2 ... valuen

name=(value1...valuen)

访问数组变量

         ${name[index]}

         访问数组中的所有项: ${name[*]} ${name[@]}

 

只读变量         readonly name

删除变量         unset name

 

环境变量

         局部变量:只在当前Shell实例中存在的变量

         环境变量:Shell的任何子进程都能使用的变量

         Shell变量:Shell设置的特殊变量 : PWD HOME PATH

export name :导出将变量放入环境中

 

文件名替换的通配符:

         *:匹配零个或多个存在的任何字符

         ?:匹配一个存在的任何字符

         [characters] :匹配任何给出字符characters之一

 

变量替换

         ${parameter:-word} : 变量未被设置或为空时,替换缺省值

         ${parameter:=word} : 为变量赋值

         ${parameter:?message} : 当变量被删除时向标准错误输出写一条信息

         ${parameter:+word} : 变量已设置时替换

 

命令替换: `command`

算术替换:     $((expression))

 

引用:

         /                 下一个字符两边加单引号

         ‘’                所有字符有效

         “”               变量自动替换

引用规则:

         引用忽略了单词边界

         命令中的组合引用

         在单个参数中嵌入空格

         引用换行符达到在下一行续行的目的

         为访问包含特殊字符的文件名而引用

         引用正则表达式通配符

         转义字符

 

if语句

         if list1

         then

                   list2

         elif    list3

         then

                   list4

         else

                   list5

         fi

 

         test expression 缩写 [expression] 0 1

1)判断表达式 

if test  (表达式为真)

if test !表达式为假

test 表达式1 –a 表达式2                  两个表达式都为真

test 表达式1 –o 表达式2                 两个表达式有一个为真

 

2)判断字符串

test –n 字符串                                   字符串的长度非零

test –z 字符串                                    字符串的长度为零

test 字符串1=字符串2                    字符串相等

test 字符串1!=字符串2               字符串不等

 

3)判断整数

test 整数1 –eq 整数2                        整数相等

test 整数1 –ge 整数2                        整数1大于等于整数2

test 整数1 –gt 整数2                         整数1大于整数2

test 整数1 –le 整数2                         整数1小于等于整数2

test 整数1 –lt 整数2                          整数1小于整数2

test 整数1 –ne 整数2                        整数1不等于整数2

 

4)判断文件

test  File1 –ef  File2                            两个文件具有同样的设备号和i结点号

test  File1 –nt  File2                            文件1比文件2

test  File1 –ot  File2                            文件1比文件2

test –b File                                           文件存在并且是块设备文件

test –c File                                           文件存在并且是字符设备文件

test –d File                                           文件存在并且是目录

test –e File                                           文件存在

test –f File                                            文件存在并且是正规文件

test –g File                                           文件存在并且是设置了组ID

test –G File                                           文件存在并且属于有效组ID

test –h File                                           文件存在并且是一个符号链接(同-L

test –k File                                           文件存在并且设置了sticky

test –b File                                           文件存在并且是块设备文件

test –L File                                           文件存在并且是一个符号链接(同-h

test –o File                                           文件存在并且属于有效用户ID

test –p File                                           文件存在并且是一个命名管道

test –r File                                            文件存在并且可读

test –s File                                           文件存在并且是一个套接字

test –t FD                                             文件描述符是在一个终端打开的

test –u File                                           文件存在并且设置了它的set-user-id

test –w File                                          文件存在并且可写

test –x File                                           文件存在并且可执行

 

case语句

         case word in

                   pattern1)

                            list1

                            ;;

                   pattern2)

                            list2

                            ;;

         esac

 

while循环

         while command

         do

                   list

         done

 

until循环

         until command

         do

                   list

         done

 

for循环

         for name in word1 ... wordN

         do

                   list

         done

 

select循环

         select name in word1 word2 ... wordN

         do

                   list

         done

 

循环控制

         break

         continue

 

特殊变量

         $0   正在被执行的名字

         $n   该变量与脚本被激活时所带的参数相对应 第一个参数为$1 第二个参数为$2

         $#     提供给脚本的参数号

         $*     所有这些参数都被双引号引住  两个参数的话相当于$1$2

         $@   所有这些参数都分别被双引号引住

         $?     前一命令执行后的退出状态

         $$     当前Shell 的进程号

         $!     前一个后台命令的进程号

        

usage语句

         echo “usage: $0 [option] [files]”

 

echo printf(不会自动换行)

 

输出重定向

         >      覆盖掉文件

         >>     追加文件

         tee   向文件和屏幕重定向输出 command | tee file

 

输入重定向

         <       <<

读取用户输入

         read name

         read LINE

 

管道(pipeline)可以将一个命令的输出重定向到另一个命令的输入

 

函数

         name() {list ;}

Shell使用IFS变量的值将一个字符串分割成几个分开的单字

 

csh,提供了三个用于迅速在UNIX文件系统中移动的命令:

         popd

         pushd

         dirs

csh中,栈在Shell中维护,但在基于Shell函数的应用中,必须将栈维护成一个可导出的环境变量以便使所有的这三个函数都可以访问它

         使用变量_DIR_STACK存储目录栈...类似于PATH

 

head 命令

         head [-n lines] files 如果不指定-n默认是前10

         ls –lut /home | head -5

 

tail命令

         tail [-n lines] files如果不指定-n默认是后10

         ls –lrt /home | tail -5

         tail –f file 使用户即使当程序正在向文件写入时也可以查看该指定文件

         eg: tail –f /var/log/httpd/access_log

grep

         查找单词: grep word file

 

tr命令

         tr ‘set1’ ‘set2’取出所有set1中的字符并将其转变成set2中的字符

sort命令

         单词排序

uniq命令

         删除所有重复的单词

awksed

         command ‘script’ filenames

eval命令

:命令 空操作 用于返回一个完成代码“0”指示命令成功完成

type命令         告诉用户一个指定命令的全路径

sleep命令        用于暂停一段时间

find命令 find start-dir options actions

         -name 指定一个确切文件名或部分文件名用于匹配

         -type 指定要检索的文件类型

         -mtime –atime –ctime

         -size

         -print –exec

xargs命令 从标准输入接收一系列单词并将这些单词提供给一个给定命令作为参数

         cat filelist | xargs rm

expr命令  执行简单的整数算术运算

bc命令

 

信号

         SIGHUP             1                检测控制终端的挂起或控制进程的死亡

         SIGINT               2                键盘中断

         SIGQUIT            3                从键盘退出

         SIGKILL              9                杀死信号

         SIGALRM          14              报警时钟信号(为计时器使用)

         SIGTERM          15              终止信号

用户系统中所有能被理解的信号都列在C语言头文件signal.h

kill –l也可以找出用户系统可以理解的信号列表

传递信号 kill

trap命令设置或取消接收到一个信号时的动作

         trap “rm –f $TMPF; exit 2” 1 2 3 15

         当收到HUP INTQUITTERM就执行rm –f $TMPF; exit 2

忽略信号

         trap ‘’ signals

         trap : signals

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值