十分钟带你认识shell命令

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

Shell概念


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


Bash特性


Shell类型:


/bin/sh


/bin/bash


/sbin/nologin


/usr/bin/sh


/usr/bin/bash


/usr/sbin/nologin


引号类型:

     单引号:无视特殊字符


      双引号:识别特殊符号


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


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


输入输出重定向


      设备名    文件描述符    类型


      /dev/stdin      0     标准输入


      /dev/stdout    1     标准输出


      /dev/stderr    2     标准错误输出


变量类型和加载


变量配置文件


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


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


声明变量:declare,typeset


declare -i num      #声明整数变量


declare -r readonly      #声明只读变量


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


   


   


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


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


             env:只显示全局变量


             declare:输出所有变量


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


      撤销环境变量


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


      设置只读变量


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


             readonly name只读变量


      特殊变量


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

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


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


             $*:获取shell所有参数


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


      特殊状态变量


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


             $$:当前shell的进程号


             $!:上一次后台进程PID


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


      特殊shell扩展变量


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


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


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


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


   


内置shell命令


echo命令


选项:


      -n:不换行


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


             \n换行


             \回车


             \t制表符


             \b退格


printf命令


      作用:打印与echo相同


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


eval命令


      作用:执行多个命令


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


exec命令


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


Shel字串的花括号用法


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


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


截取:


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


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


删除:


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


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


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


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


替换:


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


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


内置命令,外置命令


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


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


Shell运算符


1.算数运算符


逻辑概念:真为1  假为0


shell中常见的算数运算命令


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


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


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


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


$[ ]         用于整数运算


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


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


特殊符号符号


++:自增


--:自减


2.关系运算符


运算符        说明


-eq    检测两个数是否相等


-ne    检测两个数是否不同


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


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


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


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


3.逻辑运算符


运算符        说明


!                非运算,取反


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


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


4.字符串运算符


运算符                 说明


=                           检测两个字符是否相等


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


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


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


str                         检测字符串是否为空


5.文件测试运算符


操作符                 说明


-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          检测文件是否存在


接受键盘输入


read [选项] [变量名]


选项:


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


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


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


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


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


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


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


变量名:


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


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


      如果提供了一个以上的变量,则输入行分为若干字,一个接一个的赋予各个变量,而命令行上的最后一个变量取得剩余的所有字


流程控制


单分支if语法:


      if [ 条件判断式 ]


             then


                    程序


      fi


双分支if条件语句


      if [ 条件判断式 ]


             then


                    条件成立时,执行的程序


             else


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


      fi


多分支if条件语句


      if [ 条件判断式1 ]


             then


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


      elif [ 条件判断式2 ]


             then


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


      else


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


      fi


多分支case条件语句


      case $变量名 in


             “值1”)


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


             ;;


             “值2”)


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


             ;;


             *)


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


             ;;


      esac


循环语句


for语法一:


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


do


          程序


done


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


for语法二:


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


          do


                   程序


          done


注:语法二注意:


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


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


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


while循环语法:


while [ 条件判断式 ]


          do


                   程序


          done


until循环语法:


until [ 条件判断式 ]


          do


                   程序


          done


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


函数


语法:


function 函数名 () {


          程序


          return 返回值


}


特殊流程控制语句


exit语句:


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


exit [返回值]


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


break语句:


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


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


字符截取替换命令


cut列提取命令


语法:


-f 列号: 提取第几列


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


-n 取消分割多字节字符


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


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


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


awk编程


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 键


awk基本使用语法:


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


条件:


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


动作:


          格式化输出


          流程控制语句


常用参数:


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


          -v:自定义变量


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


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


awk的条件


条件            说明


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


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


>                 大于


<                 小于


>=               大于等于


<=               小于等于


==               等于


!=             不等于


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


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


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


awk内置变量


awk内置变量      作用


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


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


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


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


FS                         用户定义分隔符


ARGC          命令行参数个数


ARGV          命令行参数数组


FNR                      当文件中的当前记录数


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


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


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


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


awk函数


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


语法:


function    函数名       (参数列表) {


          函数体


}


awk中调用脚本


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


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


sed文档处理工具


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


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中的替换格式类似)。


字符处理命令


sort排序命令:


sort [选项] 文件名


选项:


-f: 忽略大小写


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


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


-r: 反向排序


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


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


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


uniq取消重复行:


uniq [选项] 文件名


选项:


-i:忽略大小写


wc统计命令:


wc [选项] 文件名


选项:


-l:只统计行数


-w:只统计单词数


-m:只统计字符数


相关文章
|
4天前
|
Java Shell Windows
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
13 1
|
1月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
62 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
1月前
|
Shell 知识图谱
Shell printf 命令
10月更文挑战第3天
18 1
|
1月前
|
Unix Shell Linux
常见的shell命令
shell常用命令
39 11
|
2月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
2月前
|
Java Shell Windows
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
51 5
|
1月前
|
Shell PHP
Shell echo命令
10月更文挑战第3天
20 0
|
1月前
|
JSON Java Shell
Dockerfile中RUN、CMD、ENTRYPOINT、SHELL命令的区别
理解这些指令的差异和应用场景,有助于构建高效、灵活且易于管理的Docker镜像。在实际应用中,根据需要选择合适的指令,可以有效地控制镜像构建和容器运行的行为。
142 0
|
1月前
|
SQL Shell 数据库
在TDengine容器中创建初始化数据库的Shell命令实例
以上就是在Docker容器环境中部署并初始化TDengine数据库的全过程,希望对你有所帮助。
61 0
|
3月前
|
分布式计算 资源调度 Hadoop
Hadoop入门基础(五):Hadoop 常用 Shell 命令一网打尽,提升你的大数据技能!
Hadoop入门基础(五):Hadoop 常用 Shell 命令一网打尽,提升你的大数据技能!