1. 首页
  2. 综合百科
  3. shell是什么意思(一小时掌握Linux下的shell编程)

shell是什么意思(一小时掌握Linux下的shell编程)

简介:关于shell是什么意思(一小时掌握Linux下的shell编程)的相关疑问,相信很多朋友对此并不是非常清楚,为了帮助大家了解相关知识要点,小编为大家整理出如下讲解内容,希望下面的内容对大家有帮助!
如果有更好的建议或者想看更多关于综合百科技术大全及相关资讯,可以多多关注茶馆百科网。

弱校,还学不会,想学的学霸,一个小时就能掌握Linux下的shell编程工作和面试。

我们通过每天在有限有效的时间内学习一个小时,完全掌握Linux的shell编程。

1shell简介

在计算机科学中,壳是命令解释器。.

Shell位于操作系统和应用程序之间,是它们之间的主要接口。shell负责向操作系统解释应用程序的输入命令信息,并向应用程序解释操作系统指令的处理结果。

总之,shell是操作系统和应用程序之间的命令翻译工具。

1.1外壳的分类

基本上,shell分为两类:图形界面shell和命令行shell。

图形界面外壳:图形界面外壳就是我们常说的桌面。

命令行外壳

Windows系统:cmd.exe命令提示符字符

Linux系统:sh/csh/ksh/bash/.

我们常说的shell就是命令行shell,我们工作中常用的就是linux系统下的bash。

https://baike.baidu.com/item/shell/99702

1.2查看系统外壳信息

查看当前系统的外壳类型。

echo$SHELL

查看当前系统环境支持的shell。

[root @ Linux-node 1 ~]# cat/etc/shell

/usr/bin/sh

/usr/bin/bash

/usr/sbin/nologi

1.3外壳脚本

外壳使用模式

手动模式:手动敲击键盘,在shell的命令行输入命令,然后按Enter键后执行通过键盘输入的命令,然后shell返回并显示命令执行的结果,逐行输入命令确认执行。

脚本模式:是指我们将手动执行的命令A写入脚本文件B,然后执行脚本B,达到执行命令A的效果.

shell脚本的定义:当一个可执行的Linux命令或语句不是在命令行状态下执行,而是通过一个文件执行时,我们把这个文件称为shell脚本。

1.4shell脚本示例现在让我们使用脚本来执行以下操作。

创建一个临时shell脚本文件itcast.sh,注意它以。嘘,

1.5shell和python在运维方面的简单对比

习惯

Shell历史悠久,使用时间长,Python时间短。

运行方式

Shell命令-系统命令

功能:命令介绍,功能强大。

Python命令-模块-系统命令

功能:可以编写复杂的逻辑。

shell脚本

shell脚本的本质是shell命令的有序集合。

步骤:创建shell脚本,编写任意多行操作系统命令或shell命令,增加文件的执行权限,结束。

外壳变量

Shell允许用户创建变量来存储数据,但不支持数据类型。将赋给变量的任何值解释为字符串。

Shell有以下四个变量:自定义变量、位置变量、预定义变量和环境变量。

用户定义的变量:

定义变量:计数=1

在前面用$: echo $ count。

删除变量赋值:取消计数

位置变量:

$0包含脚本文件名,就像您键入的命令行一样。

$1,$2.$9分别包含第一到第九个命令行参数。

$ #包含命令行参数的数量。

$ @包含所有命令行参数:& quot$1,$2.9美元& quot

$?包含上一个命令的退出状态。

$ *包含所有命令行参数:& quot$1,$2.9美元& quot

$包含正在执行的进程的ID号。

Shell环境变量

CdPATH是用于CD命令的查找路径。

家庭用户主目录

路径路径

外壳程序和语句

一个shell程序由0到n个shell语句组成,包括三类:功能语句、结构语句和描述语句。

描述性语句:以#开头的部分不被解释和执行。

它可以出现在程序中的任何地方,在一行中,或者在执行语句之后。

功能语句:任何操作系统命令、shell内部命令、自编译程序等。

Read从标准输入中读取一行,并将其赋给下面的变量。

Readvar#将所有读取的数据分配给var。

Readvar1var2var3#将一行中读取的第一个和第二个字分别赋给var1和var2,其余的赋给var3。

如果在执行read语句时,标准输入中没有数据,程序将停留在这里,等待数据到达或停止运行。

Expr主要用于简单的整数运算,包括-\ */%等。

撇号用于表示命令的运行结果。

Test用于测试三种对象:字符串、整数和文件属性。

可以换成[],注意至少一个左右。

个空格

如:test“$answer”=“yes”#变量answer的值是否为字符串yes

test$num-eq18#变量num的值是否为整数18

test-dtmp#测试tmp是否为一个目录名

结构性语句:条件测试语句、多路分支语句、循环语句、循环控制语句、后台执行语句

条件测试语句

if...then...else...fi

语法结构:

if表达式

then

命令表1#一条或者若干条命令

else

命令表2#一条或者若干条命令

fi

如果表达式为真,执行命令表1,否则执行命令表2

例子;

if[-fS1]#测试参数是否为文件

then

echo“File$1exists”

fi

if[-d$HOME/$1]#测试参数是否为目录

then

echo“File$1isadirectory”

fi

多路分支语句

case...esac

语法结构:

case字符串变量in#case语句只能检测字符串变量

模式1)

命令表1

;;

模式2)

命令表2

;;

。。。。

*)#*表示其他所有

命令表n

;;

esac

例如:

case$1in

file1)

echo“file1”

;;

file2)

echo“file2”

;;

*)

echo“others”

;;

esac

循环语句

for...do...done

当循环次数已知或者确定时,使用for循环语句来多次执行一条或一组命令,循环体由do和done来限定

for变量名in单词表

do

命令表

done

说明:变量依次取单词表中的各个单词,每取依次单词,就执行一次循环体,循环次数为单词表中的单词个数,命令表中可以是一条或由分号隔开的多条命令

如果单词表是命令行上的所有位置参数时,可以省去in单词表

list=`ls`

forfilein$list

do

if[$1=$file]

then

echo“$filefound”;

exit;#退出shell脚本

fi

done

while...do...done

语法结构:

while命令或表达式

do

命令表

done

说明:while首先测试其后的命令或表达式的值,如果为真,就执行一次循环体中的命令,然后再测试该命令或表达式的值,执行循环体,知道为假,退出循环

until...do...done

语法结构:

until命令或表达式

do

命令表

done

与上面的相反

循环控制语句:

break和continue

breakn跳出n层

continue 马上跳转到最近一层循环的下一轮循环

continuen转到最近n层循环语句的下一轮循环上

shell函数

shell程序中,常把完成固定功能且多次使用的一组命令封装在一个函数中,每当要使用时,调用函数名即可

函数调用前必须先定义,即顺序上先定义函数,再调用

调用程序可以传递参数给函数,函数可以用return语句把运行结果返回调用程序

函数只在当前shell中起作用,不能输出到子shell中

shell函数定义格式

functionfuntion_name()#function可以省掉

{

...

}

函数调用方式

value_name=`function_name[arg1arg2...]`#函数结果返回给变量

function_name[arg1arg2...]

echo$?#获取函数返回的状态

函数变量的作用域

全局作用域:在脚本的其他地方都可以访问该变量

局部作用域:只能在声明的作用域内访问

局部变量的声明:Localvariable_name=value

脚本调试:

跟踪脚本执行结果:

在希望开始调试的地方插入set-x

在希望结束调试的地方插入set+x

Bashshell结构

1:shbang行:脚本的第一行,告之内核用哪个shell解释shell脚本,由#!加shell的完整路径组成

2:注释:#后面的为注释,可以在一行后

3:shell通配符或元字符:shell中字符意义比较特殊,如*?[]><2>>>|等,防止这些字符被解释,则必须引用他们

4:局部变量:局部变量作用域在本shell中

5:全局变量:又称为环境变量,由内置的export命令创建,作用域在本shell及子shell中

6:提取变量值:$

7:参数:可以从命令行传递参数给脚本

8:命令替换:`A`$(A)结果可以赋给一个变量或代替所在位置

---------------------------------------------------------------------

正则表达式

正则表达式是一种字符模式,在查找过程中匹配指定的字符,可以用特殊的元字符来控制它们,正则表达式都被置于两个正斜杠//之间

元字符:表达的是不同于字符本身的含义

本书中的元字符有两类:shell元字符、正则表达式元字符,它们各司其职,shell元字符是由shell解析的,就是下面所讲的文件名置换;正则表达式元字符是由各种执行模式操作的程序来解析的,如vi、grep、sed、awk

---------------------------------------------------------------------

正则表达式元字符:

^行首定位

$行尾定位

.匹配单个字符

*匹配0或多个重复的位于*前的字符

[]匹配指定组字符中的任意一个;如[LlT]

[-]匹配指定范围内的字符;如[x-yA-Z0-8]

[^]匹配不在指定组内的字符

[^-]跟上面的相反

\转移跟在后面的字符#转义元字符,使之不被解释

\<词首定位符#定位以什么开头的词

\>词尾定位符#定位以什么结尾的词

---------------------------------------------------------------------

grep家族

grep家族由grep、egrep、fgrep组成

grep命令在文件中全局查找指定的正则表达式,并打印所有包含该表达式的行

一般格式:grep[选项]基本正则表达式[文件]

选项:-n显示行号-i大小写不敏感-w表达式作为词来查找,也就是不是一个词的一部分-r递归查找

基本正则表达式:可为字符串,如果为字符串,最好用“”如果是模式匹配,用‘’调用变量时,也应该使用“”

文件:可以为多个文件;如A1A2

常用举例子

grep-n“your”www#文件www中查找含有your单词的行,且输出行号

grep-nw“your”www#文件www中查找含以your做单词的行,且输出行号

grep-nr‘[a-zA-Z0-9].you’./#递归./中查找含有以a-zA-Z0-9开始的单词的行,且输出行号

---------------------------------------------------------------------

find命令及xargs

findpathname-options[-print-exec-ok]

常用的options为name此时记住要用引号将文件名模式引起来

find./“*org.txt”#在当前目录及子目录中寻找以org.txt结尾的文件

find找到文件后可用xargs对其操作

find./“*org.txt”|xargsls

find./“*org.txt”|xargsgrep“device”#在结果中搜索device

---------------------------------------------------------------------

启动

系统启动后

->init->getty进程

->/bin/login初始化环境,启动shell

->/bin/bash执行/ect/profile,执行~/.bash_profile~/.bash_login~/.profile,执行~/.bashrc

->等待用户输入

---------------------------------------------------------------------

环境

一个进程的环境包括:变量等,它定义了可以从一个进程继承到下一个进程的特性

用户的shell配置定义在shell初始化文件中,bashshell有许多启动文件,这些文件可以执行source命令,对一个文件执行source命令会使得这个文件中的所有设置称为当前shell的一部分,也就是说不会创建子shell

登陆时,会执行~/.bash_profile文件执行source命令,如无,则source~/.bash_login,若无,则source~/.profile,这三个文件只能source一个,再source~/.bashrc

~/.bashrc:包含特定的变量和别名,当一个新的bashshell启动或bash脚本启动时会自动执行source~/.bashrc

在当前提示符下输入shell或bash启动的是子shell

/etc/bashrc:系统级的函数和别名可以在/etc/bashrc文件中设置,主提示符一般在这设置

~/.profile:是一个用户定义的初始化文件,它是被Bourneshell使用的,因此不能包括对bashshell的特定设置,运行bash时只有没找到其他文件时才source此文件,它允许用户定制和修改shell环境,也可以放应用程序的初始化

---------------------------------------------------------------------

source命令或dot命令(.)和./命令

source命令式内置的bash命令,来自Cshell

dot命令也就是.来自Bourneshell

二者完全一样,都是一个脚本名作为参数,shell将在当前的shell环境中执行这个脚本,也就是不启动子shell,脚本中的设置的所有参数将成为当前shell环境的一部分。

./执行脚本时是创建子shell,脚本中的设置参数在脚本退出后就无效了。

例子:在家目录下的.bashrc中加入WANG=”nihao”

然后..bash.rc

此时执行内容为echo“$WANG”的脚本

如用./sh.sh则无输出#./执行时是在起一个子shell

如用sourcesh.sh或.sh.sh则输出nihao#source是在本shell中执行

---------------------------------------------------------------------

bashshell元字符(通配符)

\按字面含义解释后面的那个字符

&在后台处理的进程

;分隔命令

$替换命令

*匹配任意字符

?匹配任意单个字符

[...]匹配[]中的任意一个字符

[!...]不匹配[]中!的任意一个字符

(cmds)在子shell中执行命令

{cmds}在当前shell中执行命令

---------------------------------------------------------------------

文件名置换

计算命令行时,shell会用元字符来缩写能够匹配某个特定字符组的文件名或路径名

将元字符展开为文件名或路径名的过程称为文件名替换或globbing

*匹配文件(夹)名中的任意字符串

如:lsapp*

cdcmdd*

?匹配文件(夹)名中的任意一个字符

[...]匹配[]中的任意一个字符

[!...]不匹配[]中!的任意一个字符

如:ls[a-z]*.o#匹配以a-z开头的已.o结尾的文件

ls[!0-9]*.o#匹配以非0-9开头的已.o结尾的文件

---------------------------------------------------------------------

命令执行顺序

命令1&&命令2#命令1执行成功才会执行命令2

命令1||命令2#命令1执行不成功才会执行命令2

用()和{}将命令结合在一起

---------------------------------------------------------------------

Bashshell变量

变量可分为两种:局部变量和环境变量

局部变量只在创建他们的shell中可用,环境变量作用域可以扩展到子shell中去

变量命名规则:可以是字母、0-9、下划线组成,必须以字母或下划线开头,其他字符都标志着变量名的终止,变量名大小写敏感

有两个内置命令可以用来创建变量,他们是declare、typset,其选项可以控制变量的设置方式,建议使用declare.

格式:declare[选项]变量=值

选项:-x将变量设置成环境变量

-r将变量设置成只读变量

-a将变量当一个数组

---------------------------------------------------------------------

创建局部变量

1:变量赋值:变量=值#注意等号周围不能有任何空白字符,如果想赋空,可以在等号后跟上换行符

2:内置命令declare变量=值#注意等号周围不能有任何空白字符,如果想赋空,可以在等号后跟上换行符

例子:

设置:round=world或round=”worldnice”#“”保护空白符

设置:declareround=world

输出:echo$round

设置:file.bak=”xxxx”错,变量名中出现非法字符

local函数:函数内创建局部变量可以用local函数

---------------------------------------------------------------------

创建环境变量

环境变量,又被称为全局变量,作用域可以扩展到子shell中,通常环境变量用大写

环境变量是已经用export内置命令导出的变量,如果想设置环境变量,只需在设置变量时或赋值后使用export命令即可,declare带-x也是设置环境变量

设置环境变量:

1:export变量=值#注意等号周围不能有任何空白字符,如果想赋空,可以在等号后跟上换行符

2:变量=值;export变量#注意等号周围不能有任何空白字符,如果想赋空,可以在等号后跟上换行符

3:declare-x变量=值#注意等号周围不能有任何空白字符,如果想赋空,可以在等号后跟上换行符

---------------------------------------------------------------------

设置只读变量

只读变量是不能被重新定义或复位的特殊变量,但是如果使用declare定义的变量,可以重定义,不能复位

设置:name=”TOM”

readonlyname#设置只读

unsetname#不能复位

name=Jem#不能重定义

设置:declare-rcity=”shanghai”

unsetcity#不能复位

declarecity=“beijin”#可以

---------------------------------------------------------------------

提取变量的值

在变量前加$

---------------------------------------------------------------------

复位变量

只要不被设置只读,局部变量和环境变量都可以用unset命令复位

格式:unset变量名

---------------------------------------------------------------------

显示变量值

1:echo[选项]变量#echo将他的参数显示到标准输出上

选项:-e#允许解释转义字符,如echo-e“\a”\a转义为报警

如:echoThenameis$NAME

echo-e“\a”#报警

注:正在学习C/C++linux的小伙伴需要学习资料的可以私信“资料”免费分享全套学习资料哦

本文主要介绍了关于shell是什么意思(一小时掌握Linux下的shell编程)的相关养殖或种植技术,综合百科栏目还介绍了该行业生产经营方式及经营管理,关注综合百科发展动向,注重系统性、科学性、实用性和先进性,内容全面新颖、重点突出、通俗易懂,全面给您讲解综合百科技术怎么管理的要点,是您综合百科致富的点金石。
以上文章来自互联网,不代表本人立场,如需删除,请注明该网址:http://23.234.50.4:8411/article/106429.html