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