Linux基础之shell编程

正则表达式

基础正则表达式

元字符 作用
* 前一个字符匹配 0 次或任意多次。
. 匹配除了换行符外任意一个字符。
^ 匹配行首。例如:^hello 会匹配以 hello 开头的行。
$ 匹配行尾。例如:hello$会匹配以 hello 结尾的行。
[] 匹配中括号中指定的任意一个字符,只匹配一个字符。例如:[aoeiu] 匹配任意一个元音字母,[0-9] 匹配任意一位数字,[a-z][0-9]匹配小写字和一位数字构成的两位字符。
[^] 匹配除中括号的字符以外的任意一个字符。例如:[^0-9] 匹配任意一位非数字字符,[^a-z] 表示任意一位非小写字母。
\ 转义符。用于取消讲特殊符号的含义取消。
{n} 表示其前面的字符恰好出现 n 次。例如:[0-9]{4} 匹配 4 位数字,[1][3-8][0-9]{9} 匹配手机号码。
{n,} 转表示其前面的字符出现不小于 n 次。例如: [0-9]{2,} 表示两位及以上的数字。
{n,m} 表示其前面的字符至少出现n次,最多出现m次。例如:[a-z]{6,8} 匹配 6 到 8 位的小写字母。

变量的使用与输入输出

变量的定义与引用

  • 变量的定义
    (1)shell中的变量名可以用字母、数字、下划线组成,但数字不能作为变量名的第一个字符。
    (2)通过赋值符号“=”来定义一个变量的值
myname='jason'  #字符串类型,不解析任何字符
var="abcd" #双引号内部会解析$和反斜杠特殊字符
sum=100;price=1.24
now_date=`date` #反引号执行系统命令

shell的变量类型只有字符串类型,当不用引号引起来的时候,要保证变量的值不包含特殊的符号,如空格符、$、&

  • 变量的引用
    (1)变量的引用使用美元符号$加变量名,来引用一个变量的值
    如:定义变量:program_name="httpd"
    引用变量:echo $program_nameecho ${program_name}
    (2)变量名外面的花括号
    是可选的,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:
#!/bin/bash
for skill in php java linux db2
 do
    echo "I am good at ${skill}Script"  #帮助shell接收器识别边界
 done

环境变量、局部变量以及预定义变量

环境变量

  • 环境变量的定义
    指再操作系统中指定操作系统运行环境的一些参数,如PATH、PWD、USER、当前使用的SHELL名称等。
  • 常见的环境变量
    PATH:系统路径
    HOME:当前用户家目录
    HISTSIZE:保存历史命令记录的条数
    LOGNAME:当前用户登录名
    HOATNAME:主机名称,若应用程序要用到主机名的话,一般是从这个环境变量中取得
    SHELL:当前用户用的是哪种shell
    LANG/LANGUAGE:和语言相关的环境变量,使用多种语言的用户可以修改此环境变量
    MAIL:当前用户的邮件存放目录

  • 查看环境变量
    env:显示所有环境变量

局部变量

局部变量包括:
1.在shell脚本中由用户自定义的变量
shell脚本中定义的变量作用域是从被定义的地方开始,到shell结束为止,起作用域为本脚本,离开本脚本,变量无效。
2.在用户登录的shell中定义的变量,重新登录后该变量消失。

预定义变量

预定义变量和环境变量雷系,也是在shell一开始就定义了的变量所不同的是,用户只能根据shell的定义来使用这些变量,而不能重定义它。所有预定义变量都是由$符和另一个符号组成的,常用的shell预定义变量有:

  • $# 位置参数的数量
  • $* 所有位置参数的内容
  • $? 命令执行后返回的状态。 # 0表示成功,非0表示失败
  • $$ 当前进程的进程号
  • $! 后台运行的最后一个进程号。 #很少用,了解即可
  • $0 当前执行的进程名

脚本的输入和输出

  • echo输出
  • printf输出
  • read输入
  • <<按行输入

发表评论

邮箱地址不会被公开。 必填项已用*标注