关于Shell编程

shell概述

Shell,既是编程语言,同时也是一个命令解释器.
对于shell语言的解析器在linux中有sh,bash,nologin,csh,tcsh
shell语言的编写以#!/bin/bash开头,作为指定解析器

例如

#!/bin/bash 

echo "hello world"

在该shell脚本执行后会输出一个hello world

执行shell脚本的方式有

(1)bash 或者sh 后面接脚本的相对或者绝对路径,这两种方式无需给脚本添加上x的执行权限.

(2) 直接输入脚本的相对或者绝对路径来执行,这样的方式必须先给脚本添加上执行的权限

(3)在脚本的路径前添加上" ."或者source的方式来执行,这样的方式无需像bash或者sh那样打开一个子shell来执行,子shell开与不开的区别在于环境变量的继承关系.

 Shell的语法:

shell中的变量有系统变量与自定义变量和特殊变量.使用set可以查看到全部的变量

常见的系统变量有$HOME,$PWD,$SHELL,$USER

自定义变量的语法,变量名=变量值,等号前后不能有空格,unset来撤销变量,使用readonly来声明静态变量,静态变量不能被unset撤销

(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。(2)等号两侧不能有空格

(3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。

(4)变量的值如果有空格,需要使用双引号或单引号括起来。

变量的值中如果有空格,使用双引号或者单引号括起来

使用export的方式将变量提升为全局环境变量

特殊的变量有:

$n(n为数字,$0代表该脚本的名称,其余的表示参数,十以上的参数使用{}将数值包含其中)   

$#(作用为获取所有输入参数的个数)

$*(代表命令行中的所有参数,将所有的参数看作一个整体)

$@(这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)

$?(返回最后一次执行的命令的状态,如果值是0表示上一次的命令正确执行,如果是非0(可以自己定义)表示执行不正确)

运算符:

基本的语法有:$(( ))或者$[ ]

条件判断

[ condition ](注意condition前后要有空格

常用判断条件

(1)两个整数之间比较

-eq 等于(equal) -ne 不等于(not equal)

-lt 小于(less than) -le 小于等于(less equal)

-gt 大于(greater than)       -ge 大于等于(greater equal)

(2)按照文件权限进行判断

-r 有读的权限(read)

-w 有写的权限(write)

-x 有执行的权限(execute)

(3)按照文件类型进行判断

-e 文件存在(existence)

-f 文件存在并且是一个常规的文件(file)

-d 文件存在并且是一个目录(directory)

多条件判断:(&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一条命令执行失败后,才执行下一条命令)

流程控制:

if判断,case语句,for循环,while循环,

if的基本语法

(1)单分支

if [ 条件判断式 ];then

    程序

fi 

或者

if  [ 条件判断式 ]

then

    程序

fi

(2)多分支

if [ 条件判断式 ]

then

    程序

elif [ 条件判断式 ]

then

程序

else

程序

fi

注意事项:

(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格

(2)if后要有空格

case语句

case $变量名 in

"值1")

    如果变量的值等于值1,则执行程序1

;;

"值2")

    如果变量的值等于值2,则执行程序2

;;

    …省略其他分支…

*)

    如果变量的值都不是以上的值,则执行此程序

;;

esac

注意事项:

(1)case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。

(2)双分号“;;”表示命令序列结束,相当于java中的break。

(3)最后的“*)”表示默认模式,相当于java中的default。

for循环:

for (( 初始值;循环控制条件;变量变化 ))

do 

    程序

done

(2)基本语法2

for 变量 in 值1 值2 值3…

do 

    程序

done

while循环:

while [ 条件判断式 ]

do 

    程序

done 

read读取控制台输入

1)基本语法

read  (选项)  (参数)

选项:

-p:指定读取值时的提示符;

-t:指定读取值时等待的时间(秒)如果-t不加表示一直等待

参数

变量:指定读取值的变量名

函数

basename,dirname

基本语法

basename [string / pathname] [suffix]   (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。

basename 可以理解为取路径里的文件名称

选项:

suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。

dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))

dirname 可以理解为取文件路径的绝对路径名称

自定义函数

基本语法

[ function ] funname[()]

{

Action;

[return int;]

}

(1)必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译。

(2)函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)

Shell工具

cut,sort,awt

cut  [选项参数]  filename

说明:默认分隔符是制表符

选项参数说明

选项参数

功能

-f

列号,提取第几列

-d

分隔符,按照指定分隔符分割列,默认是制表符“\t”

-c

按字符进行切割 后加加n 表示取第几列  比如 -c 1

awk:一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。

基本用法

awk  [选项参数] ‘/pattern1/{action1}  /pattern2/{action2}...’ filename

pattern:表示awk在数据中查找的内容,就是匹配模式

action:在找到匹配内容时所执行的一系列命令

2)选项参数说

选项参数

功能

-F

指定输入文件折分隔符

-v

赋值一个用户定义变量

awk的内置变量

变量

说明

FILENAME

文件名

NR

已读的记录数(行号)

NF

浏览记录的域的个数(切割后,列的个数)

sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。

1)基本语法

Sort  (选项)  (参数)

选项

说明

-n

依照数值的大小排序

-r

以相反的顺序来排序

-t

设置排序时所用的分隔字符

-k

指定需要排序的列

参数:指定待排序的文件列表

wc命令用来统计文件信息。利用wc指令我们可以计算文件的行数,字节数、字符数等。 

1)基本语法

wc  [选项参数]  filename

选项参数

功能

-l

统计文件行数

-w

统计文件的单词数

-m

统计文件的字符数

-c

统计文件的字节数

正则表达式的入门

正则表达式通常被用来检索、替换那些符合某个模式的文本。在Linux中,grep,sed,awk等命令都支持通过正则表达式进行模式匹配。

常用特殊字符:^(^ 匹配一行的开头),$($ 匹配一行的结束), . (. 匹配一个任意的字符)

* 不单独使用,他和上一个字符连用,表示匹配上一个字符0次或多次

特殊字符[ ]:[ ] 表示匹配某个范围内的一个字符

例如:[6,8]------匹配6或者8

[0-9]------匹配一个0-9的数字

[0-9]*------匹配任意长度的数字字符串

[a-z]------匹配一个a-z之间的字符

[a-z]* ------匹配任意长度的字母字符串

[a-c, e-f]-匹配a-c或者e-f之间的任意字符

特殊字符:\

\ 表示转义,并不会单独使用。由于所有特殊字符都有其特定匹配模式,当我们想匹配某一特殊字符本身时(例如,我想找出所有包含 '$' 的行),就会碰到困难。此时我们就要将转义字符和特殊字符连用,来表示特殊字符本身

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
shell脚本成分 开头和注释: shell脚本的开头,用来解释shell程序,包括:#!/bin/bash、#!/bin/csh、#!/bin/tcsh、#!/bin/pdksh,一般用#!/bin/bash。。 shell脚本中的注释,以#开头的句子表示注释。 变量: 变量的赋值和引用 在shell编程中变量没有类型,简称弱类型编程语言,不需要声明,在引用这个变量时会创建它(在变量名前加$符号引用变量的值)。在定义变量时,若String中包含空格、制表符、换行符,需用单(双)引号,双引号内允许变量替换,而单引号内就不可以。 shell变量的作用域 可以用export内置命令将局部变量设置为全局变量。 位置变量 用于向shell脚本传递信息。参数相关数目传入脚本,此数目任意多,但只有前9个可以被访问,使用shift命令可以改变限制。其中,$0:脚本名字。 特定变量参数 $#:传递到脚本的参数个数;$*:以一个单字符串显示所有项脚本传递的参数。与位置变量不通,此选项参数可超过9个;$$:脚本运行的当前进程ID号;&!:后台运行的最后一个进程的进程ID号;$@:与$#相同,但是使用时加引号,并在引号中返回每个参数;$-:显示shell使用的当前选项,与set命令功能相同;$?:显示最后命令的退出状态(0表示没有错误,其他任何值表明有错误。)。 变量的规则 1.变量与变量内容以一个等号『=』来连结,如下所示『myname=VBird』 2.等号两边不能直接接空格符,如下所示为错误:『myname = VBird』或『myname=VBird Tsai』 3.变量名称只能是英文字母与数字,但是开头字符不能是数字,如下为错误:『2myname=VBird』 "4.变量内容若有空格符可使用双引号『""』或单引号『'』将变量内容结合起来,但 双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示:『var=""lang is $LANG""』则『echo $var』可得『lang is en_US』 单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:『var='lang is $LANG'』则『echo $var』可得『lang is $LANG』" 5.可用跳脱字符『 \ 』将特殊符号(如 [Enter], $, \, 空格符, '等)变成一般字符; "6.在一串命令中,还需要藉由其他的命令提供的信息,可以使用反单引号『`命令`』或 『$(命令)』 特别注意:那个 ` 是键盘上方的数字键 1 左边那个按键,而不是单引号! 例如想要取得核心版本的配置:『version=$(uname -r)』再『echo $version』可得『2.6.18-128.el5』" "7.若该变量为扩增变量内容时,则可用 ""$变量名称"" 或 ${变量} 累加内容,如下所示: 『PATH=""$PATH"":/home/bin』" 8.若该变量需要在其他子程序运行,则需要以 export 来使变量变成环境变量:『export PATH』 9.通常大写字符为系统默认变量,自行配置变量可以使用小写字符,方便判断 (纯粹依照使用者兴趣与嗜好) ; 10.取消变量的方法为使用 unset :『unset 变量名称』例如取消 myname 的配置:『unset myname』
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值