shell编程基础知识小结

1、文件类型介绍
linux系统中主要包括以下七种文件类型: d 目录 - 普通文件 l 符号链接 s 套接字文件 b 块设备文件 c 字符设备文件 p 命名管道文件

2、正则表达式
正则表达式在shell编程中非常重要。

从一个文件或命令输出中抽取或过滤文本时。可使用正则表达式(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个.)

更多内容,请查阅正则表达式的详细资料加深学习。

3、字符类描述
常用的可用字符类列表:
[: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(包括某些必需的重音字符等)。

4、引号类型
shell中共有四种引用类型:
“ ”双引号
‘ '单引号
` `  反引号
    反斜线

说明:
“ ”可引用除$、` 、 、外的任意字符或字符串,“ ”中的变量能够正常显示变量值。
‘ '与“ ”类似,不同在于shell会忽略任何的引用值。
例如: GIRL=‘girl'
       echo “The ‘$GIRL' did well”
       则打印:The ‘girl' did well

说明:
 ` `用于设置系统命令的输出到变量,shell会将` `中的内容作为一个系统命令并执行质。
    例如:echo `date` 则打印当前的系统时间。

说明:
    用来屏蔽特殊含义的字符:&  *  +  ^  $  `  “  |  ?
    例如:expr 12 * 12 将输出144

5、变量设置的几种模式
变量设置时的不同模式:
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

注:以上几种模式的灵活应用,将在很大程度上提升编程技巧。

6、条件测试
test命令用于测试字符串、文件状态和数字,expr测试和执行数值输出。
Test格式:test condition 或 [ condition ](需要特别注意的是condition的两边都要有一个空格,否则会报错),test命令返回0表示成功。
下面将分别描述test的三种测试:
文件状态测试(常用的)
-d           测试是否文件夹
-f            测试是否一般文件
-L          测试是否链接文件
-r           测试文件是否可读
-w         测试文件是否可写
-x           测试文件是否可执行
-s           测试文件是否非空

1、字符串测试
五种格式: test  “string”
           test  string_operator  “string”
           test  “string”  string_operator  “string”
           [ string_operator  “string” ]
           [ “string”  string_operator  “string” ]
其中string_operator可以为:
    = 两字符串相等
    !=    两字符串不等
    -z   空串
    -n   非空串

2、数值测试
两种格式: “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表示前后结果相“与”)

expr命令一般用于整数值,但也可以用于字符串。
格式:  expr srgument operator operator argument
例如:  expr 10 + 10
        expr 10 ^ 2 (10的平方)
        expr $value + 10

增量计数--expr在循环中最基本的用法
例如:  LOOP=0
        LOOP=`expr $LOOP + 1`

3、模式匹配:通过指定的冒号选项计算字符串中的字符数
例如:  value=account.doc
        expr $value : `(.*).doc`
        输出 account

7、命令执行顺序

&& 成功执行一个命令后再执行下一个
|| 一个命令执行失败后再执行另一个命令
( ) 在当前shell中执行一组命令(格式:(命令1;命令2; ……))
{ } 同( )
例如:  comet mouth_end || ( echo “hello” | mail dave ;exit )
 如果没有( ),则shell将直接执行最后一个命令(exit)

在shell编程中,命令执行顺序,有时决定了一个程序的执行结果,而&&与||应用最为广泛。

8、脚本调试
脚本调试
最有用的调试脚本的工具是echo命令,可以随时打印有关变量或操作的信息,以帮助定位错误。
也可使用打印最后状态($?) 命令来判断命令是否成功,这时要注意的是要在执行完要测试的命令后立即

输出$?,否则$?将会改变。

Set命令也可以用来辅助脚本测试:
Set –n           读命令但是不执行
Set –v           显示读取的所有的行
Set –x           显示所有的命令及其参数
要关闭set选项,只要把-换成+就可以了。

(0)

相关推荐

  • shell编程基础之认识与学习BASH

    1.认识Bash 通过Shell将输入的指令与Kernel沟通,让Kernel控制硬件工作查看Shell:cat /etc/shell登录后预设的shell类型记录在/etc/passwd中,与账户相关命令别名:alias lm='ls -al' #注意有无空格帮助:man bash命令类型:type 复制代码 代码如下: type ls # ls is aliased to `ls –color=auto'type cat # cat is hashed (/bin/cat)type cd #

  • Shell编程指南

    基础知识 shell执行方式   sh xx.sh (文件须有r权限)  ||  ./xx.sh (文件须有x权限) 注:sh xx.sh方式比较安全 文件名后缀 .sh shell内容开头 #!/bin/bash || #!/bin/sh || #!/bin/csh || #!/bin/ksh 注:#!/bin/bash 使用比较多 退出  exit 0 变量赋值与使用 不需要定义即可直接使用  注:变量赋值时=号两端不能有空格 以$变量名或${变量名}访问变量内容 流程控制 判断  注:确保

  • 利用shell编程实现DOS风格的Linux命令行

    如果你是习惯于Windows命令提示符的IT人,当你第一次使用Linux命令行时,一定会感到无所适从.你所熟悉的DOS命令再Linux中基本不存在.摆在你面前的是一大堆要记背的命令. 一种替代方案是利用强大的Linux外壳命令编写shell脚本,让你在Linux下也能用DOS命令.下面告诉你怎么做. shell脚本编写基础    从定时备份到执行简单命令,Linux的shell脚本可以执行各种功能.几乎所有的程序都可以用shell脚本来运行.在脚本中甚至可以包含一些简单的条件选择.shell脚本

  • 分享shell编程中的几个小技巧

    1.打印一些头信息command  <<  dilimiter----dilimiter 以分界符号dilimiter中的内容作为命令的标准输入常用在echo命令中,这样就避免了没输出一行就要使用一个echo命令,同时,输出格式的调整也相应变得简单了.例如:  echo << something_message**********************hello, welcome to use my shell script **********************somet

  • Shell编程之Shell变量学习总结

    一.变量操作 A.变量显示.打印语法:echo $varB.变量设置语法:var=value 变量的设置规则:1.变量两端不能直接接空格符2.变量名称只能是因为字母与数字,但开头不能使数字3.双引号内的特殊字符如$等,保持原本特性 复制代码 代码如下: [root@bogon ~]# var="lang is $LANG"[root@bogon ~]# echo %varroot@bogon ~]# echo $varlang is zh_CN.UTF-8 1. 单引号内的特殊字符则仅

  • shell编程之实现windows回收站功能分享

    一. 功能简介1. 将删除的文件放在回收站中2. 恢复删除的文件3. 实现linux rm命令的功能, 使用起来几乎和linux 系统自带的rm ,命令完全一样4. 新增功能: rm -l, rm -e, rm -c5. 该脚本每次在运行时候会检查$HOME/.trash 目录下文件大小之和, 若 超过最大容量, 脚本会自动将日志文件中所记录文件中的前一半文件从回 收站中清除,所以建议删除大文件(相对于回收站最大容量而言)直接用 命令/bin/rm 而不要用 rm. 二. 使用方法:1. 将tr

  • PowerShell编程中的一些命名规则参考

    本文介绍PowerShell自定义函数在使用时的最佳实践(Best Practices).包括函数名的命名.可选参数.必选参数等. PowerShell中的函数定义可以很简单的使用一个"function <函数名>{函数体}"的形式去定义.但微软推荐创建函数时遵循以下实践规则. 1.函数名. 使用cmdlet的统一命令规则,即"动词-名词"的形式.如Write-Host,表示输出到主机.如果是获取一个列表,不要使用List作为动词,建议使用Get,如Ge

  • shift妙用之解决shell编程中的入参问题

    我说过了,shell是我的常规武器,目前虽然还不纯熟,但是我爱shell这门语言,在Linux下面混,总要写脚本.程序员是有基因,对编程语言是有偏好的,你让我写C代码,我会觉得很爽,会有困难,会有痛苦的摸索和学习,但是,我愿意:学习shell/python,我也很乐意,甚至Lisp这种冷门的语言我也充满了好奇,虽然现在Go和Erlang我一点也不懂,但是我按耐不住对这两种语言的兴趣,只要我抽出手来,一定会和他们缠绵一番.有爱就会有恨,我痛苦地意识到到自己是个很情绪化的程序员,哪怕我一遍遍地骂自己

  • 让代码整洁、过程清晰的BASH Shell编程技巧

    这是我写BASH程序的招式.这里本没有什么新的内容,但是从我的经验来看,人们爱滥用BASH.他们忽略了计算机科学,而从他们的程序中创造的是"大泥球"(译注:指架构不清晰的软件系统). 在此我告诉你方法,以保护你的程序免于障碍,并保持代码的整洁. 一.不可改变的全局变量 1.尽量少用全局变量 2.以大写命名 3.只读声明 4.用全局变量来代替隐晦的$0,$1等 在我的程序中常使用的全局变量: 复制代码 代码如下: readonly PROGNAME=$(basename $0) read

  • 深入浅出Shell编程 Shell变量介绍

    •深入浅出Shell编程: Shell 变量 ◦1 系统变量 ◦2 Shell用户变量 ■2.1 基础 ■2.2 使用技巧 ■2.3 shell 中的数组 ◦3 shell 环境变量 先不要管Shell的版本,来看看Shell 变量,在Shell中有三种变量:系统变量,环境变量,用户变量.其中用户变量在编程过程中使用最多,系统变量在对参数判断和命令返回值判断会使用,环境变量主要是在程序运行的时候需要设置. 1 系统变量 Shell常用的系统变量并不多,但却十分有用,特别是在做一些参数检测的时候.

  • shell编程基础 单引号和双引号的区别

    下面用一个简单的shell程序要说明一下. debian:~/learn/shell# cat phonebook Alice Chebba 973-555-2015 Barbara Swingle 201-555-9257 Liz Stachiw 212-555-2298 Susan Goldberg 201-555-7776 Susan Topple 212-555-4932 Tony Iannino 973-555-1295 Stromboli Pizza 973-555-9478 deb

  • Shell编程的一些知识集合

    下午在写程序的时候需要将shell命令返回的数值赋予给某变量,使用了a=$()的方法 soft=$(grep -i "\(Software \)Token/Passcode/." 123.txt |wc -l) echo "[+] 软卡总数:" $soft ...... #!shell下的运算 over=$((var-use)) echo "[+] 剩余硬卡:" $over Shell的嵌入命令 : 空,永远返回为true . 从当前shell中

随机推荐