shell编程学习笔记

前段时间看的shell编程,边看边记下来的笔记,不过有些截图没能发上来,参考书籍《UNIX.Shell编程24学时教程》。

SHELL编程一UNIXShell工具简介

一、基础知识

Shell提供一个到UNIX系统的接口,它收集用户输入并根据输入执行程序,并显示程序的输出。有时被叫做命令解释器。

1、命令:简单命令、复杂命令(带参数)、复合命令(分号隔开,如:who; ll)。

2Shell类型:Bourne Shell(包括sh, ksh, bash)C Shell(包括csh, tcsh)

3、模式:交互式和非交互式。

       交互式启动:$/bin/sh 退出:exit

       非交互式启动:$/bin/sh filename

4、初始化文件 /etc/profile

       使用的终端类型:TERM=vt100

       定位命令列表:PATH=/bin:/usr/bin

       定位命令帮助列表:MANPATH=/usr/man:/usr/share/man

5、执行 chmod a+x ./logins 例,内容为:

       #!/bin/sh               位于第一行,而在其他行时#开头为注

       who;ls;

6、文件操作:

       ls –aF;     cat filename;        wc filename; cp -i source destination;       

mv –i source destination;       rm files;

7、目录操作:

       pwd;      cd directory;          mkdir directory;            cp - r source destination;      

       mv source destination;          rmdir;            rm –r;

8、文件属性操作:

       符号链(相当于快捷方式或别名)创建:ln –s source destination

       管道

       chmod expression files; (r,w,x,o; 4,2,1执行)           

chown改变一个文件的所有权;  chown options user:group files

chgrp options group files

9、进程

       前台进程,后台进程。启动后台进程在命令后面添加&

       前移后:ctrl+z. 后移前:fg. 使后台进程持续运行:nohup

       jobs(显示悬挂的及正在后台运行的进程)         ps(正在运行的所有进程)            kill

SHELL编程二

二、编程

1、变量

       定义:name=value (使用带空格的值时加引号)

       访问:$name

 例:FRUIT=apple    $echo $FRUIT(结果为apple)       $echo FRUIT(结果为FRUIT)

Bourne Shell只支持标量,Korn Shell中支持数组。

数组创建: name[index]=value          数组访问:${name[index]}

只读变量:readonly name

删除变量:unset name

局部变量(只在当前SHELL实例中存在),环境变量(SHELL任何子进程都能使用),SHELL变量(正确运行所必需,如PWD,PATH,HOME等)。

导出环境变量:export name

2、替换

1)文件名替换通配符:*(匹配0个或多个)、?(匹配1个存在的任何字符)、[characters]

匹配给出的字符,例ls test[0123456789].sqlls test[0-9].sql 。匹配所有以字母或数字结尾的文件:ls *[a-z A-Z 0-9]

否定一个集合:如列出所有除a开头的文件,ls [!a]*

       2)变量替换:

       ${parameter:-word}      parameter为空或未设置,则用word代替,parameter值不变

       ${parameter:=word}      parameter为空或未设置,则parameter设为值word

       ${parameter:?message}         parameter为空或未设置,则message作为标准错误打印

       ${parameter:+word}      parameter设置了,则用word代替,parameter值不变

       3)命令和算术替换

              例:DATE=’date’                UP=’date; uptime’

                     foo:$((5+3)/2)

3、引用:关掉一个字符的特殊意义。

       三种方式:/(关掉某个),(关掉全部),(关掉部份)。

       例:echo Hello /; world        输出 Hello ; world

              echo ‘<125.**>;(update)’     输出<125.**>;(update)

              双引号未关掉:$用于参数替换,后引号 用于命令替换, /

4、流控制

       1if语法:if  list1

                            then        list2

                            elif          list3

                            then       list4

                            else         list5

                            fi

                     其中elifelse可选。

       例:#!/bin/sh

              Fruit=apple

              F=b

              if $Fruit>$F;

              then echo $Fruit

              else echo $F

              fi

       使用testtest expression,可用文件测试、字符串比较、数字比较。

       2case语法:case  word  in

                                          pattern1)        list1  ;;

                                          Pattern2)        list2  ;;

                                   esac

                                   其中;;类似于break

              例:#!/bin/sh

                     Fruit=apple

                     case “$Fruit” in

                                   apple) echo “I like apple.” ;;

                                   banana) echo “banana” ;;

                     esac

                     运行后输出I like apple.

       条件可以运前之前学习的进行组合出复杂表达式。

5、循环

       1while语法:while command

                                   do  list

                                   done

       例:输出1~10

#!/bin/sh

              x=1

              while [ $x –le 10 ]

              do

                            echo $x

                            x=$(($x+1))

              done

              还可以进行嵌套。

       2until语法:until command

                                   do   list

                                   done

       3for语法:for name in word1 word2…wordN

                              do      list

                              done

例:输出1~10

#!/bin/sh

              x=1

              for x  in 1 2 3 4 5 6 7 8 9 10

              do

                            echo $x

              done

       4select语法:select name in word1 word2…wordN

                                  do    list

                                  done

 

5breakcontinue

6、参数(有些地方不明白)

       处理参数和选项采用如下方法:使用case语句手工处理参数和选项,使用getopts处理选项。

       1)特殊变量

 

7、输入输出

       1)向终端输出:echoprintf(格式化输出,位于/usr/bin)

 

       2)输出重定向:

>”(把输出的内容重定向到指定的文件中)

>>”(把输出的内容追加到指定的文件尾部)

tee(同时重定向到屏幕和文件)        command | tee file

3)输入重定向

Command < file,例:Mail kony.sun@gmail.com < File_Exam

Command << delimiter

Document

Delimiter

4)读取用户输入

read name   直到用户输入回车为止。

5)管道

6)重定向到同一个文件

例:ll >file1 >&file2

8、函数

    1)创建和使用

    name( ) { list; } 例如:ls1( ) { ls –l; }

                        cd( ) { chdir ${1:-$HOME }; PSI=” ’pwd’ $” ; export PSI; }

    激活:$name

 

    2)函数间协同工作并共享数据

     略,P138

9、文本过滤器

    1)最常用的有:head, tail, grep, sort, uniq, tr

    2head格式:head [ -n lines ] files ,其中[ -n lines ]不写默认查看前10行,带的话指定前n行。

       组合使用,例检索5个最常访问的文件:ls –l ut /home/public_html | head -5

    3tail格式:tail [ -n lines ] files ,其中[ -n lines ]不写默认查看后10行,带的话指定后n行。

    4grep格式:grep word file ,例:grep creat test2.sql test.sql

                 grep -i word file ,不考虑大小写。

                

                 grep -v word file/dir ,不包括该单词的。

                 grep -n word file ,一起写出行号。

                 grep -l word dir ,只列出包含它的文件名。

    5tr:将一个集合中的所有字符改变成别一个集合中的字符,也可用于删除字符集。

          tr  ‘set1’  ‘set2’

    6sort:为输入文件占的行进行分类。

          例统计一个单词使用了多少次。

 

    7uniq:打印出文件中所有的唯一行。若某行多次,只打一个。

            uniq filename

10、使用正规表达式过滤文本

1command ‘script’ filenames

commandawksedscript是可以被awksed理解的命令清单,filenames表示命令所作用的文件清单。

2)正规表达式基本构造块包括:

普通字符:大小写字母、数字、字符。

元字符:.*[chars]^$/。例/a.c/匹配如a+c, a-c, abc行。

3使用sed

/p打印/d删除/s/pattern1/pattern22代替1

$sed ‘/0/.[0-9][0-9]$/p’ fruit_prices.txt 告诉sed打印所有匹配模式/0/.[0-9][0-9]$的行。

11、使用awk过滤文本

编程语言。(见详解)

12、各种工具

1eval命令:第二次处理命令行时使用。

2):命令:返回一个完成代码0,用于指示命令成功完成。

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

4sleep命令:暂停给定秒数,sleep n

5find命令:检索,find start-dir options actions,例find / -nme alpha –print

6xargs命令:从标准输入接收单词并将其提供给给定命令作为参数,cat filelist | xargs rm

7expr命令:执行简单整数算术运算,$expr 8/3

8bc命令:不局限于整数的算术工具。

9remsh/rsh/rcmd/remote命令:远程Shell

SHELL编程三高级主题

1、信号处理

    1)信号位于C语言头文件signal.h中。

2、调试

3、使用函数解决问题

1)创建库

创建Shell函数库就像创建Shell脚本,主要区别是库只包含函数,而脚本包含函数和主代码。

2)使用库中包含的函数:.file

3)常见函数:printERROR, printWARNING, pringUSAGE, promptRESPONSE, getSpaceFree, getSpaceUsed, getPID, getUID, toUpper, toLower, isSpaceAvailable, isUserRoot

4、使用Shell脚本解决问题

5、脚本可移植性

1)判断unix版本:uname

   操作系统发行版本号:uname –rs

   硬件类型:uname –m

    主机名:uname –n

2)提高可移植性技巧:条件执行和抽取。

6Shell编程疑难解答

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值