shell编程学习笔记

15 篇文章 0 订阅

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

SHELL 编程一 UNIX Shell 工具简介

一、基础知识

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

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

2 Shell 类型: 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].sql ls 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 、流控制

       1 if 语法: if  list1

                            then        list2

                            elif          list3

                            then       list4

                            else         list5

                            fi

                     其中 elif else 可选。

       例: #!/bin/sh

              Fruit=apple

              F=b

              if $Fruit>$F;

              then echo $Fruit

              else echo $F

              fi

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

       2 case 语法: 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 、循环

       1 while 语法: while command

                                   do  list

                                   done

       例:输出 1~10

#!/bin/sh

              x=1

              while [ $x –le 10 ]

              do

                            echo $x

                            x=$(($x+1))

              done

              还可以进行嵌套。

       2 until 语法: until command

                                   do   list

                                   done

       3 for 语法: 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

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

                                  do     list

                                  done

 

5 break continue

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

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

       1 )特殊变量

 

7 、输入输出

       1 )向终端输出: echo printf( 格式化输出,位于 /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

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

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

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

    4 grep 格式: 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 ,只列出包含它的文件名。

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

          tr  ‘set1’   ‘set2’

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

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

 

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

            uniq filename

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

1 command ‘script’ filenames

command awk sed script 是可以被 awk sed 理解的命令清单, filenames 表示命令所作用的文件清单。

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

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

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

3 使用 sed

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

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

11 、使用 awk 过滤文本

编程语言。(见详解)

12 、各种工具

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

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

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

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

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

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

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

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

9 remsh/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 )提高可移植性技巧:条件执行和抽取。

6 Shell 编程疑难解答

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值