shell基础学习

简介: shell基础学习

给大家准备的shell基础学习

一.Shell概念

shell是一个C语言编写的程序,它是用户使用Linux的桥梁。Shell即是一种命令语言,又是一种程序设计语言。

1.Shell类型:

/bin/sh

/bin/bash

/sbin/nologin

/usr/bin/sh

/usr/bin/bash

/usr/sbin/nologin

2.引号类型:

     单引号:无视特殊字符

      双引号:识别特殊符号

      无引号:连续的字符可以不加引号

      反引号:引用命令执行结果,等于$()用法

3.输入输出重定向

      设备名    文件描述符    类型

      /dev/stdin     0     标准输入

      /dev/stdout   1     标准输出

      /dev/stderr    2     标准错误输出

变量类型和加载

4.变量配置文件

      用户个人配置文件:~/.bash_profile,~/.bashrc远程登录用户特有文件

      全局配置文件:/etc/profile,/etc/bashrc,全局配置文件,影响所有登录系统的用户

5.声明变量:declare,typeset

declare -i num      #声明整数变量

declare -r readonly      #声明只读变量

declare -a arr=‘([0]=”a” [1]=”b” [2]=”c”)’   #生成数组变量

     

     

     6. 检查系统环境变量的命令:

             set:输出所有变量,包括全局变量,局部变量

             env:只显示全局变量

             declare:输出所有变量

             export:显示和设置环境变量值

      7.撤销环境变量

             unset 变量名,删除变量或函数

      设置只读变量

             直接readonly显示当前系统只读变量

             readonly name只读变量

     8. 特殊变量

         $0:获取shell脚本文件名,以及脚本路径

             $n:获取shell脚本的第n个参数,n在1~9之间,参数需要空格隔开

             $#:获取执行的shell脚本后面的参数总个数

             $*:获取shell所有参数

             $@:同$*,如果加了双引号,会把所有参数为独立的字符串分开

      9.特殊状态变量

            $?:上次命名执行状态,0正确,其他为失败

             $$:当前shell的进程号

             $!:上一次后台进程PID

             $_:获取上一次执行的命令的最后一个参数

      10.特殊shell扩展变量

             ${parameter:-word}     #如果parameter变量值为空,返回word字符串

       ${parameter:=word}     #如果parameter变量为空,则word替代变量值,且返回

             ${parameter:?word}     #如果parameter变为空,word当作错误输出,否则正常输出

       ${parameter:+word}     #如果变量为空,什么都不做,否则word返回

     

二.内置shell命令

1.echo命令

选项:

      -n:不换行

      -e:解析字符串中的特殊字符

             \n换行

             \回车

             \t制表符

             \b退格

2.printf命令

      作用:打印与echo相同

      与echo的区别:自动识别特殊字符,不自动添加换行服

3.eval命令

      作用:执行多个命令

      格式:eval 命令;命令;命令

4.exec命令

      作用: 不创建子进程,执行后续命令;并执行完毕后,自动exit退出

5.Shel字串的花括号用法

${变量名}:返回变量值

${#变量名}:返回变量长度,字符长度

截取:

${变量名:start}:返回变量start数值之后的字符,start是数字

${变量名:start:stop}:返回变量从start下标到stop的所有字符

删除:

${变量名#word}:从变量开头删除最短匹配的word字串

${变量名##word}:从变量开头删除最长匹配的word字串

${变量名%word}:从变量结尾删除最短的word字串

${变量名%%word}:从变量结尾删除最长匹配的word字串

替换:

${变量名/pattern/string}:用string代替第一个匹配的pattern字串

${变量名//pattern/string}:用string代替所有的pattern字串

6.内置命令,外置命令

内置命令:在系统启动时就载入内存,常驻内存,执行效率高,但是占用资源

外置命令:用户需要从硬盘中读取程序文件,再读入内存加载

三.Shell运算符

1.算数运算符

逻辑概念:真为1  假为0

2.shell中常见的算数运算命令

(())          用于整数运算的常用运算符,效率高

let          用于整数运算,类似(())

expr        可用于整数运算,但是还有很多其他功能

bc          计算器程序(适合整数及小数运算)

$[ ]         用于整数运算

awk        awk既可以整数运算,和小数运算

declare   定义变量值和属性,-i参数可以用于定义整形变量做运算

3.特殊符号符号

++:自增

--:自减

4.关系运算符

运算符       说明

-eq    检测两个数是否相等

-ne    检测两个数是否不同

-gt     检测第一个数值是否大于右边数值

-lt      检测第一个数值是否小于右边数值

-ge    检测第一个数值是否大于等于右边的数值

-le     检测第一个数值是否小于等于第二个数值

5.逻辑运算符

运算符       说明

!              非运算,取反

-o              或运算,第一个表达式为true则返回true

-a              与(并且)运算,所有表达式都为true才返回true

6.字符串运算符

运算符                说明

=                        检测两个字符是否相等

!=                    检测两个字符是否不相等

-z                       检测字符串长度是否为0

-n                       检测字符串长度是否不等于0

str                       检测字符串是否为空

7.文件测试运算符

操作符                说明

-b file         检测文件是否是块文件

-c file         检测文件是否是字符设备文件

-d file         检测文件是否是目录

-f file          检测文件是否是普通文件

-p file         检测文件是否是有名管道

-g file         检测文件是否设置了SGID位

-k file         检测文件是否设置了粘着位

-u file         检测文件是否设置了SUID位

-r file          检测文件是否可读

-w file        检测文件是否可写

-x file         检测文件是否可执行

-s file         检测文件是否为空

-e file         检测文件是否存在

四.接受键盘输入

1.read [选项] [变量名]

选项:

      -a:后面跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。

      -p:提示信息:在等待read输入时,输出提示信息

      -t:秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间

     -n:数字:read命令只接受指定的字符数,就会执行

      -s:隐藏输入的数据,适合机密信息的输入

      -d:后面跟一个标志符,其实只是其后的第一个字符有用,作为结束的标志

      -e:在输入的时候可以使用命令补全功能

变量名:

      变量名可以自定义,如果不指定变量名,会把输入保存默认变量REPLY

      如果只提供了一个变量名,则整个输入行赋予给变量

      如果提供了一个以上的变量,则输入行分为若干字,一个接一个的赋予各个变量,而命令行上的

最后一个变量取得剩余的所有字

五.流程控制

1.单分支if语法:

      if [ 条件判断式 ]

             then

                    程序

      fi

2.双分支if条件语句

      if [ 条件判断式 ]

             then

                    条件成立时,执行的程序

             else

                    条件不成立,执行的另一个程序

      fi

3.多分支if条件语句

      if [ 条件判断式1 ]

            then

                    当条件判断式1成立时,执行程序1

      elif [ 条件判断式2 ]

             then

                    当条件判断式2成立时,执行程序2

     else

                    当所有条件都不成立,最后执行程序

      fi

4.多分支case条件语句

      case $变量名 in

             “值1”)

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

             ;;

             “值2”)

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

             ;;

             *)

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

             ;;

      esac

六.循环语句

1.for语法一:

for 变量 in 值1 值2 值3 (可以是一个文件等)

do

         程序

done

注:这种语法中for循环的次数,取决于in后面值的个数(空格分割),有几个值就循环几次,并且每次循环都把值赋予变量。

2.for语法二:

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

         do

                 程序

         done

注:语法二注意:

初始值:在循环开始时,需要给某个变量赋予初始值,如i=1

循环控制条件:用于指定变量循环次数,如i<=100,则只要i的值小于等于100,循环就会继续

变量变化:每次循环之后,变量该如何变化,如i=i+1。代表每次循环之后,变量i的值都加1

3.while循环语法:

while [ 条件判断式 ]

         do

                 程序

         done

4.until循环语法:

until [ 条件判断式 ]

         do

                 程序

         done

注:和whlie循环相反,until循环时只要条件判断式不成立则进行循环,并执行循环程序,一旦循环条件成立,则终止循环。

 

函数

语法:

function 函数名 () {

         程序

         return 返回值

}

七.特殊流程控制语句

1.exit语句:

注:系统中使用exit命令,用于退出当前用户。可是在Shell脚本中,exit语句是用来退出当前脚本

exit [返回值]

返回值:这个脚本执行完之后的返回值就是我们自己定义的返回值。

2.break语句:

注:当程序执行到break语句时,会结束整个当前循环。

3.continue语句:

注:continue也是结束流程控制语句,如果在循环中,continue语句只会结束单次当前循环。

字符截取,替换和处理命令

正则表达式

       元字符      描述

       \               转义符,将特殊字符进行转义,忽略其特殊意义

       ^              匹配行首,在awk中^是匹配字符串的开始

   $               匹配行尾,awk中,$则是匹配字符的结尾

       .                匹配换行符之外的任意单个字符

       [ ]              匹配包含在[ ^字符 ]之中的任意一个字符

       [ ^ ]          匹配[ ^字符 ]之外的任意一个字符

       [ - ]           匹配[ - ]中指定范围中的任意一个字符,要写成递归

       ?               匹配之前的项1次或者0次

| 匹配之前的项1次或者多次 | sa-6+匹配sa-6、sa-666,不能匹配sa-

| 匹配之前的项0次或者多次| co*l匹配cl、col、cool、coool等

() | 匹配表达式,创建一个用于匹配的子串 | ma(tri)?匹配max或maxtrix

{n} | 匹配之前的项n次,n是可以为0的正整数 |[0-9]{3}匹配任意一个三位数,可以扩展为[0-9][0-9][0-9]

{n,}| 之前的项至少需要匹配n次 | [0-9]{2,}匹配任意一个两位数或更多位数不支持{n,}{n,}{n,}

{n,m}| 指定之前的项至少匹配n次,最多匹配m次,n<=m | [0-9]{2,5}匹配从两位数到五位数之间的任意一个数字

|| 交替匹配|两边的任意一项 | ab(c|d)匹配abc或abd

八.字符截取替换命令

1.cut列提取命令

语法:

-f 列号: 提取第几列

-d 分隔符: 按照指定分隔符分割列

-n 取消分割多字节字符

-c 字符范围: 不依赖分隔符来区分列,而是通过字符范围(行首为0)来进行字段提取。“n-”表示从第n个字符到行尾;“n-m”从第n个字符到第m个字符;“一m”表示从第1个字符到第m个字符。

--complement    补足被选择的字节、字符或字段

--out-delimiter  指定输出内容是的字段分割符

九.awk编程

1.awk概述

注:awk是一种处理文本文件的语言,是一个强大的文本分析工具

printf格式化输出语法:

printf ‘输出类型输出格式’ 输出内容

输出类型:

%c:     ASCII字符.显示相对应参数的第一个字符

%-ns:   输出字符串,减号“-”表示左对齐(默认右对齐),n是数字指代输出几个字符,几个参数就写几个%-ns

%-ni:   输出整数,n是数字指代输出几个数字

%f:    输出小数点右边的位数

%m.nf:  输出浮点数,m和n是数字,指代输出的整数位数和小数位数。如%8.2f代表共输出8位数,其中2位是小数,6位是整数。

输出格式:

\a: 输出警告声音

\b: 输出退格键,也就是Backspace键

\f: 清除屏幕

\n: 换行

\r: 回车,也就是Enter键

\t: 水平输出退格键,也就是Tab 键

\v: 垂直输出退格键,也就是Tab 键

2.awk基本使用语法:

         amk ‘条件1{动作1} 条件{动作2}…’ 文件名

条件:

         一般使用关系表达式作为条件

动作:

         格式化输出

         流程控制语句

常用参数:

         -F:指定输入时用到的字段分割符

         -v:自定义变量

        -f:从脚本中读取awk命令

         -m:对val值设置内的限制

3.awk的条件

条件           说明

BEGIN        在awk程序一开始时,尚未读取任何数据之前执行。BEGIN后的动作只在程序开始时                        执行一次

END           在awk程序处理完所有数据,即将结束时执行。END后的动作只在程序结束时执行一次

>                大于

<                小于

>=             大于等于

<=             小于等于

==             等于

!=            不等于

A~B           判断字符串A中是否包含能匹配B表达式的子字符串

A!~B        判断字符串A中是否不包含能匹配B表达式的子字符串

/正则/        如果在“//”中可以写入字符,也可以支持正则表达式

4.awk内置变量

awk内置变量     作用

$0                      代表目前awk所读入的整行数据。

$n                      代表目前读入行的第n个字段

NF                      当前行拥有的字段(列)总数

NR                      当前awk所处理的行,是总数据的第几行

FS                       用户定义分隔符

ARGC         命令行参数个数

ARGV         命令行参数数组

FNR                    当文件中的当前记录数

OFMT        数值的输出格式(默认%.6g)

OFS                    输出字段的分隔符(默认空格)

ORS                    输出记录分隔符(默认为换行符)

RS                       输入记录分隔符(默认为换行符)

5.awk函数

awk编程也允许在编程时使用函数

语法:

function    函数名      (参数列表) {

         函数体

}

6.awk中调用脚本

注:对于小的单行程序来说,将脚本作为命令行自变量传递给awk是非常简单的,而对于多行程序就比较难处理。当程序是多行的时候,使用外部脚本是很适合的。首先在外部文件中写好脚本,然后可以使用awk的-f选项,使其读入脚本并且执行。

语法:-f 脚本文件  文件目录

十.sed文档处理工具

注:sed主要是用来讲数据进行选取,替换,删除,新增的命令

1.sed语法:

sed [选项] ‘[动作]’ 文件名

选项:

-n:  一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过sed命令处理的行输出到屏幕。

-e:  允许对输入数据应用多条sed命令编辑。

-f 脚本文件名: 从sed脚本中读入sed操作。和awk命令的-f非常类似。

-r:  在sed中支持扩展正则表达式。

-i:  用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出

动作:

num a \: 追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾需要用“\”代表数据未完结。num表示第几行

c \: 行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需用“”代表数据未完结。

num i \: 插入,在当期行前插入一行或多行。插入多行时,除最后一行外,每行末尾需要用“”代表数据未完结。num表示第几行

d ; 删除,删除指定的行。

p : 打印,输出指定的行。

s : 字串替换,用一个字符串替换另外一个字符串。格式为“行范围s/"旧字串/新字串/g”(和vim中的替换格式类似)。

十一.字符处理命令

1.sort排序命令:

sort [选项] 文件名

选项:

-f: 忽略大小写

-b: 忽略每行前面的空白部分

-n: 以数值型进行排序,默认使用字符串型排序

-r: 反向排序

-u: 删除重复行。就是uniq命令

-t: 指定分隔符,默认是分隔符是制表符

-k n[,m]: ―按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)

uniq取消重复行:

uniq [选项] 文件名

选项:

-i:忽略大小写

wc统计命令:

wc [选项] 文件名

选项:

-l:只统计行数

-w:只统计单词数

-m:只统计字符数



相关文章
|
6月前
|
关系型数据库 MySQL Shell
shell学习(十七) 【mysql脚本备份】
shell学习(十七) 【mysql脚本备份】
50 0
|
1月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
63 12
|
6月前
|
Linux Shell 文件存储
【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(深入df和dh的区别和探索)
【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(深入df和dh的区别和探索)
187 1
|
6月前
|
监控 Linux Shell
【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(排查问题指令 - 下)
在线上排查问题时,查询日志、查看系统配置和分析操作系统信息是至关重要的。这些操作可以帮助我们深入了解软件和服务的兼容性,并解决潜在的问题。在本次学习中,我们将介绍并深入学习一些我在处理类似问题时常用的指令。通过掌握这些指令,你将能够更加高效地定位和解决线上问题,提高系统的稳定性和性能。让我们一同进入这个学习过程吧!
82 0
【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(排查问题指令 - 下)
|
4月前
|
Shell Linux
Shell 脚本编程学习
Shell 脚本编程学习
36 0
|
5月前
|
人工智能 运维 中间件
Linux-shell简单学习
Linux-shell简单学习
30 0
|
6月前
|
运维 Shell Python
Shell和Python学习教程总结
Shell和Python学习教程总结
|
6月前
|
机器学习/深度学习 Shell Linux
shell 学习记录
shell 学习记录
31 0
|
6月前
|
Shell
shell学习(六) 【case多条件分支语句】
shell学习(六) 【case多条件分支语句】
95 1
|
6月前
|
Shell 应用服务中间件 nginx
shell学习(七) 【shell 函数】
shell学习(七) 【shell 函数】
42 1