shell脚本基础

Shell脚本编程的常识
七种文件类型
正则表达式
字符类描述
shell的引号类型
变量设置时的不同模式:
条件测试
命令执行顺序
脚本调试
一些常用的小trick
打印一些头信息
创建一个长度为0的空文件
一些常用的shell变量
$0的使用
Shift的运用
用head或tail指令指定查阅的行数
awk使用规则
第一个 awk
多个字段
外部脚本
BEGIN 和 END 块
规则表达式和块
条件语句
数值变量
字符串化变量
众多运算符
字段分隔符
字段数量
记录号
多行记录
OFS 和 ORS
将多行转换成用 tab 分隔的格式
循环结构
for 循环
break 和 continue
数组下标字符串化
数组工具
格式化输出
字符串函数
一些更耐人寻味的函数
字符串替换
特殊字符串形式
sed使用规则
sed 示例
另一个 sed 示例
地址范围
带规则表达式的地址
有关地址的更多内容
替换
规则表达式混乱
更多字符匹配
高级替换功能
组合使用
一个地址的多个命令
附加、插入和更改行
使用 sed 的几个示例
linux常用脚本和函数
linux常用命令
关于文件/目录处理的指令:
关于 Process 处理的指令:
关于字符串处理的指令:
联机查询的指令:
网络运用指令:
Vi常用技巧

 
Shell脚本编程的常识
(这些往往是经常用到,但是各种网络上的材料都语焉不详的东西,个人认为比较有用)
七种文件类型
d            目录                                                       l             符号链接
s             套接字文件                                           b            块设备文件
c            字符设备文件                                       p            命名管道文件
-             普通文件
正则表达式
从一个文件或命令输出中抽取或过滤文本时。可使用正则表达式(RE),正则表达式是一些特殊或不很特殊的字符串模式的集合。
       基本的元字符集:
       ^                   只匹配行首。
       $                   只匹配行尾。
       *                   一个单字符后紧跟*,匹配0个或多个此单字符。
       []                   匹配[]内字符,可以是一个单字符,也可以是字符序列。可以使
              用-来表示[]内范围,如[1-5]等价于[1,2,3,4,5]。
\                    屏蔽一个元字符的特殊含义,如\$表示字符$,而不表示匹配行
                    尾。
       .                 匹配任意单字符。
       pattern\{n\}   匹配pattern出现的次数n
       pattern\{n,\}m匹配pattern出现的次数,但表示次数最少为n
       pattern\{n,m\} 匹配pattern出现的次数在n与m之间(n,m为0-255)
 
几个常见的例子:
       显示可执行的文件:ls –l | grep …x...x..x
       只显示文件夹:ls –l | grep  ^d
       匹配所有的空行:^$
       匹配所有的单词:[A-Z a-z]*
       匹配任一非字母型字符:[^A-Z a-z]
       包含八个字符的行:^……..$(8个.)
字符类描述
以下是可用字符类的相当完整的列表:
[:alnum:] 字母数字 [a-z A-Z 0-9]
[:alpha:] 字母 [a-z A-Z]
[:blank:] 空格或制表键
[:cntrl:] 任何控制字符
[:digit:] 数字 [0-9]
[:graph:] 任何可视字符(无空格)
[:lower:] 小写 [a-z]
[:print:] 非控制字符
[:punct:] 标点字符
[:space:] 空格
[:upper:] 大写 [A-Z]
[:xdigit:] 十六进制数字 [0-9 a-f A-F]
尽可能使用字符类是很有利的,因为它们可以更好地适应非英语 locale(包括某些必需的重音字符等等).
shell的引号类型
shell共有四种引用类型:
       “ ”          双引号
       ‘ ’           单引号
` `         反引号
\            反斜线
l        “ ” 可引用除$、` 、\ 、外的任意字符或字符串,“ ”中的变量能够正常显示变量值。
l        ‘ ’与“ ”类似,不同在于shell会忽略任何的引用值。
              例如: GIRL=‘girl’
                        echo “The ‘$GIRL’ did well”
              则打印:The ‘girl’ did well
l        ` `用于设置系统命令的输出到变量,shell会将` `中的内容作为一个系统命令并执行质。
              例如:echo `date` 则打印当前的系统时间。
l        \ 用来屏蔽特殊含义的字符:&  *  +  ^  $  `  “  |  ?
例如:expr 12 \* 12 将输出144
变量设置时的不同模式:
valiable_name=value           设置实际值到 variable_name中
valiable_name+value           如果设置了variable_name,则重设其值
valiable_name:?value           如果未设置variable_name,则先显示未定义用户错误信息
valiable_name?value           如果未设置variable_name,则显示系统错误信息
valiable_name:=value   如果未设置variable_name,则设置其值
valiable_name-value            同上,但取值并不设置到variable_name
条件测试
test命令用于测试字符串、文件状态和数字,expr测试和执行数值输出。
Test格式:test condition 或 [ condition ](需要特别注意的是condition的两边都要有一个空格,否则会报错),test命令返回0表示成功。
l        下面将分别描述test的三种测试:
n        文件状态测试(常用的)
-d           测试是否文件夹
-f            测试是否一般文件
-L          测试是否链接文件
-r           测试文件是否可读
-w         测试文件是否可写
-x           测试文件是否可执行
-s           测试文件是否非空
n        字符串测试
五种格式: test  “string”
                            test  string_operator  “string”
                            test  “string”  string_operator  “string”
                            [ string_operator  “string” ]
                            [ “string”  string_operator  “string” ]
其中string_operator可以为:       =     两字符串相等
                                                               !=    两字符串不等
                                                               -z   空串
                                                               -n   非空串
n        数值测试
两种格式: “number”  number_operator  “number”
                            [ “number”  number_operator  “number” ]
其中:number_operator 可以为:-eq  、-ne、-gt、-lt、-ge
例如:  NUMBER=130
                     [ “990”  –le  “995”  –a  “NUMBER”  -gt  “133” ]
                     (其中-a表示前后结果相“与”)
l        expr命令一般用于整数值,但也可以用于字符串。
n        格式:  expr srgument operator operator argument
例如:  expr 10 + 10
              expr 10 ^ 2 (10的平方)
              expr $value + 10
n        增量计数――expr在循环中最基本的用法
例如:  LOOP=0
              LOOP=`expr $LOOP + 1`
n        模式匹配:通过指定的冒号选项计算字符串中的字符数
例如:  value=account.doc
              expr $value : `\(.*\).doc`
              输出 account
命令执行顺序
&&               成功执行一个命令后再执行下一个
||                    一个命令执行失败后再执行另一个命令
( )                  在当前shell中执行一组命令(格式:(命令1;命令2; ……))
{ }                同( )
       例如:  comet mouth_end || ( echo “hello” | mail dave ;exit )
             如果没有( ),则shell将直接执行最后一个命令(exit)
脚本调试
最有用的调试脚本的工具是echo命令,可以随时打印有关变量或操作的信息,以帮助定位错误。也可使用打印最后状态($?) 命令来判断命令是否成功,这时要注意的是要在执行完要测试的命令后立即输出$?,否则$?将会改变。
Set命令也可以用来辅助脚本测试:
Set –n           读命令但是不执行
Set –v           显示读取的所有的行
Set –x           显示所有的命令及其参数
(要关闭set选项,只要把-换成+就可以了,这里有点特殊,要注意一下)
 
 
一些常用的小trick
打印一些头信息
command  <<  dilimiter
……
……
dilimiter
以分界符号dilimiter中的内容作为命令的标准输入
       常用在echo命令中,这样就避免了没输出一行就要使用一个echo命令,同时,输出格式的调整也相应变得简单了。
       例如:  echo << something_message
************************************************
                                         hello, welcome to use my shell script
************************************************
                something_message
将在屏幕上输出:
************************************************
                                         hello, welcome to use my shell script
************************************************
一、利用<<的分解符号性质还可以自动选择菜单或实现自动的ftp传输
也就是利用分解符号的性质自动选择菜单。
例如: ./menu_choose >>output_file 2>&1 <<Choose
             2
             3
             Y
             Choose
             则自动在执行脚本的过程中一步步作出选择:2,3,Y
<<这种性质决定了它是理想的访问数据库的有用工具,可以用它来输入面对数据库提示时所作的各种选择。
创建一个长度为0的空文件
执行 > file_name 命令或 touch file_name 命令。
一些常用的shell变量
$#          传递到脚本的参数个数
$*          以一个单字符串显示所有向脚本传递的参数(可大于9个)
$$          脚本运行的当前进程的ID号
$!           后台运行的最后一个进程的ID号
$@        与$#相同,但使用时加引号,并在引号中返回每个参数
$-           显示shell使用的当前选项
$?                 显示最后命令的退出状态,0表示无错误(这个变量也常常用来打印输出,在脚本调试时标记某个shell命令或某个函数是否正确执行,但是要注意,$?记载的是最近的函数或命令的退出状态,因此打印时应该立即打印以获得正确的信息)
$0的使用
在变量中有一种位置变量$n,用来存放函数调用或脚本执行时传入的参数,其中$0表示函数名或脚本名,需要注意的是,这时的脚本名传递的是包含全路径的脚本名。从$1-$9表示传入的第一到第九个参数,这样的参数表示不能多于九个,如果多于九个,可以使用下面将要提到的shift指令来读取。

因为$0存放函数名或脚本名,因此我们可以通过echo $0来输出调用信息,但是,由于存放的是全路径名,我们可以利用一个shell命令来得到脚本名,basename $0 将得到$0中名字的部分,而与之相反的,dirname $0将得到$0中路径的部分。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值