Linux入门学习笔记——Shell命令

Shell命令1.Shell简介

Shell是一个用C语言编写的程序,它是用户使用Linux的桥梁。
Shell既是一种命令语言,又是一种编程语言。
Shell是指提供接口的应用程序,用户通过该接口访问操作系统的内核服务。

KenThompson的Sh是第一个UnixShell,而WindowsExplorer是典型的GUIShell。
Shell脚本(shellscript)是为shell编写的脚本程序。

2.Shell变量2.1定义变量

例如:your_name="piggy"

注意,变量名和等号之间不能有空格,就像所有你不知道的编程语言一样相同的。
同时,变量名的命名必须遵循以下规则:

只能使用英文字母、数字和下划线命名,且第一个字符不能以数字开头。

中间不能有空格,可以使用下划线?_。

不允许使用标点符号。

bash中的关键字不能使用(可以使用help命令查看保留关键字)。

2.2使用变量

要使用已定义的变量,只需在变量名称前添加美元符号即可。

your_name="cat"echo?$your_name

定义的变量可以重新定义。

2.3只读变量

使用只读命令将变量定义为只读变量只读变量的值。

2.4删除变量

使用未定义的变量可以删除变量。

unsetvariable_name

变量删除后不能再次使用。
unset命令无法清除只读变量。

2.5变量类型

1)局部变量在脚本或命令中定义,仅在当前shell实例中有效。

2)环境变量所有的程序,包括shell启动的程序,都可以访问环境变量以保证其正常运行。
必要时Shell脚本还可以定义环境变量。

3)Shell变量是由shell程序设置的特殊变量。
有些shell变量是环境变量,有些是局部变量。
3.StringShell

字符串是shell编程中最常用和最有用的数据类型。

单引号字符串的限制:

单引号字符串中的任何字符都会按原样输出,单引号字符串中的变量为空;

单身;-带引号的字符串单个单引号不能出现在带引号的字符串中(即使在对单引号使用转义字符之后),但它可以成对出现并用作字符串连接。

双引号的优点:

双引号中可以出现变量

双引号中可以出现转义字符

3.1字符串拆分your_name="run"#?使用双引号连接greeting="hello,?"$your_name"?!"greeting_1="hello,?${your_name}?!"echo?$greeting$greeting_1#?使用单引号引起来greeting_2='hello,?'$your_name'?!'greeting_3='greeting,?${your_name}?!'echo?$greeting_2$greeting_3输出:greeting,?跑?!?你好,?ru?!n?!?hello,?${your_name}?!3.2获取字符串string="abcd"echo?${#string}#?Output?4<的长度第3.3页提取子字符串string="runoob?is?a?great?site"echo?${string:1:4}#?Output?unoo3.4搜索找到的字符串字符的位置?**o**或?**o**?a?greatsite"\echo?`expr?index?"$string"?io`#?Output?4

注意:上面脚本中的?`?是后面的返回,而不是单引号?'。
4.1定义数组的一般形式为:数组名=(值1值2...值n)

例如:array_name=(value0value1value2value3)

array_name=(value0value1value2value3)

您还可以单独定义每个数组组件:

array_name[0]=value0array_name[1]=value1array_name[n]=valuen

下标不必连续,范围没有限制

4.2读取数组

一般格式为:${数组名[下标]}

例如:v=${array_name[n]}

使用?@?符号可以获取数组中的所有元素,例如:echo${array_name[@]}

4.3获取字符串长度

获取字符串长度的方式与数组长度检索方法,例如:

#?获取数组元素个数length=${#array_name[@]}#?或length=${#array_name[*]}#?获取a的长度单个字符串元素lengthn=${#array_namee[n]}5个Shell注释

单行注释:以?#?开头

注释为多行:

:<<注释EOF。
content...注释内容...注释内容...EOF:<<'注释内容...注释内容...'Shell传递参数

当你运行Shell脚本时,向脚本传递参数向脚本接收参数的格式为:$n。
n?代表一个数字,1是运行脚本的第一个参数,2是运行脚本的第二个参数,以此类推。
|参数格式|说明||----|--------||$#?|传递给脚本的参数数量||$?|将传递给脚本的所有参数显示为单个字符串||$$?|当前运行脚本的进程ID号?||$!?|后台运行最后一个进程ID号?||$@?|与$相同,但用在引号中并返回引号中的每个参数||$-?|与set命令功能相同||$|显示最后一个命令的输出状态。
0表示没有错误,任何其他值表示错误

7/p>

array_name=(value1value2...valuen)

7.1读取数组

${array_name[index]}

7.2获取数组中的所有元素

使用@或*获取数组中的所有元素,例如:

array[0]=Aarray[1]=Barray[2]=Carray[3]=Decho?"数组元素为:?${array[*]}"echo?"数组元素为:?${array[@]}"7.3获取数组的长度your_name="run"#?使用双引号连接greeting="hello,?"$your_name"?!"greeting_1="hello,?${your_name}?!"echo?$greeting$greeting_1#?使用单引号引起来greeting_2='hello,?'$your_name'?!'greeting_3='你好,?${your_name}?!'echo?$greeting_2?$greeting_3输出:你好,?运行?!?你好,?运行?!你好,?昆德?!?hello,?${your_name}?!08个Shell运算符

Shell与其他编程语言一样,支持多种运算符,包括:

算术运算符


关系运算符

布尔运算符

字符串运算符

文件测试运算符

BasicBash不支持简单运算符数学运算,但是可以通过其他命令来实现,比如awk和expr,其中expr是用得最多的。
expr是一个计算表达式的工具,可以用于计算表达式。

例如,添加两个数字(请注意,您使用反斜杠?`?而不是单引号?')

your_name="run"#?使用双引号将问候语="hello,?"$your_name"?!"greeting_1="hello,?${your_name}?!"echo?$greeting$greeting_1#?使用单引号连接greeting_2='hello,?'$your_name'?!'greeting_3='hello,?${your_name}?!'echo?$greeting_2$greeting_3输出:hello,?run?!?hello,?run?!hello,?run?!?hello,?${your_name}?!1

表达式之间必须有空格运算符

完整表达式必须包含`include

8.1算术运算符运算符说明示例+加法expr$a+$b的结果是?30-减法expr$a-$的结果b是-10*expr$a\*$b相乘的结果是?200/除expr$b/$a结果是?2%余数expr$b%$a结果是?0=Seta=$b将变量b的值设置为a==Equal。
比较两个数字,如果相等,则返回true[$a==$b]并返回?false!=不相等。
比较两个数,如果不同则返回true[$a!=$b]返回true

注意:

条件表达式必须用方括号括起来并且必须包含空格,例如:[$a==$b]不正确,应写为[$a==$b]

乘号(*)前面必须有反斜杠\才能实现乘法

8.2关系运算符说明示例-eq检测两个数是否相等,equal返回true[$a-eq$b]返回?false-ne检测如果两个数不相等,返回true[$a-neifnotequalto$b]返回true-gt检测左边的数字是否大于右边的数字如果是则返回true[$a-gt$b]返回false-lt查明左边的数字是否为小于右边的数字如果是,则返回true[$a-lt$b]返回true-ge检测左侧如果左边的数字大于等于右边的数字,如果是,returntrue[$a-ge$b],returnfalse-le检查左边的数字是否小于或等于右边的数字,如果是,则返回true[$a-le$b]返回true8.3示例的描述的布尔运算符如果表达式为true,则返回false,否则返回true[!false]返回true-o或运算,如果表达式为true,则返回true[$a-lt20-o$b-gt100]返回?true-AND运算,两个表达式都为true时才返回true[$a-lt20-a$b-gt100]返回?false8.4运算符&&逻辑的逻辑描述示例AND[[$a-lt100&&$b-gt100]]returnfalse//逻辑OR[[$a-lt100//$b-gt100]]返回true8.5字符串运算符说明示例=检测两个字符串是否相等,返回trueifequal[$a=$b]Returnfalse!=检测两个字符串是否不相等,不相等则返回true[$a!=$b]return?true-zdiscoveryword如果字符串长度为0,如果为0,返回true[-z$a],返回false-n检查字符串长度是否不为0,如果不为0,返回true[-n"$a"]返回true$,检查字符串长度是否为0是否为空,不为空返回true[$a]return?true8.6测试运算符file操作符说明示例-bfile检测该文件是否为被阻止设备的文件file]返回检查?false-dfile测试该文件是否为目录,返回true[-d$file],返回false检测该文件是否为普通文件(既不是文件夹也不是设备文件)。
f$file]]return?true-gfile检测file的SGID位是否设置,返回true[-g$file]并返回??假-pfile检查文件是否为命名管道,如果是则返回true[-p$file]return?false-ufile检测文件是否设置了SUID位,如果是则返回true[-u$file]return?false-rfile检测文件是否为可读,如果是,则返回true[-r$file]返回?true-wfile检测文件是否可写,返回true[-w$file]检测文件是否可写可执行文件$file]返回?true文件检测如果文件为空(如果文件大小大于0),如果不为空则返回true[-s$file]检测文件(包括目录)是否存在,如果存在则返回true?[-e$file]return?true9.Shellecho命令9.1show表示一个普通字符串your_name="run"#?用双引号括起来greeting="hello,?"$your_name"?!"greeting_1="hello,?${your_name}?!"echo?$greetingng$greeting_1#?使用单引号加入greeting_2='问候语,?'$your_name'?!'greeting_3='问候语,?${your_name}?!'echo?$greeting_2$greeting_3输出:hello,?run?!?hello,?run?!hello,?run?!?hello,?${your_name}?!29.2显示转义字符your_name="跑步”#?使用双引号连接greeting="hello,?"$your_name"?!"greeting_1="hello,?${your_name}?!"echo?$greeting$greeting_1#?使用单引号连接greeting_2='hello,?'$your_name'?!'greeting_3='hello,?${your_name}?!'echo?$greeting_2$greeting_3输出:hello,?run?!?hello,?run?!hello,?run?!?hello,?${your_name}?!39.3显示变量

read命令从标准输入读取一行,并设置值shell变量中每个输入行字段的值。

your_name="run"#?使用双引号括起greeting="hello,?"$your_name"?!"greeting_1="hello,?${your_name}?!"echo?$greeting$greeting_1#?使用单引号引起来greeting_2='hello,?'$your_name'?!'greeting_3='hello,?${your_name}?!'echo?$greeting_2$greeting_3输出:hello,?ru?!?damno,?run?!hello,?run?!?hello,?${your_name}?!49.4显示换行符your_name="run"#?使用双引号将greeting="greeting,?"$your_name"?!"greeting_1="greeting,?${your_name}?!"echo?$greeting$greeting_1#?使用单引号引用连接greeting_2='hello,?'$your_name'?!'greeting_3='hello,?${your_name}?!'echo?$greeting_2$greeting_3输出:hello,?run?!?hello,?run?!hello,?run?!?hello,?${your_name}?!59.5显示无换行your_name="run"#?使用双引号加入greeting="hello,?"$your_name"?!"greeting_1="greeting,?${your_name}?!"echo?$greeting$greeting_1#?使用单引号将greeting_2括起来='greeting,?'$your_name'?!'greeting_3='greeting,?${your_name}?!'echo?$greeting_2$greeting_3输出:greeting,?run?!?greeting,?run?!greeting,?run?!?hello,?${your_name}?!69.6显示定向到文件的结果your_name="run"#?使用双引号将greeting="hello,?"$your_name"?!"greeting_1="hello,?${jour_name}?!"echo?$greeting$greeting_1#?使用单引号用引号引起来的greeting_2='greeting,?'$your_name'?!'greeting_3='greeting,?${your_name}?!'echo?$greeting_2$greeting_3输出:hello,?run?!?hello,?run?!hello,?run?!?hello,?${your_name}?!710.Shellprintf

printf命令使用带引号的文本或空格分隔的参数。
您可以在?printf?中使用格式化字符串。
字符串等默认.printf的行为不会像?echo?自动添加换行符,我们可以手动添加?\n

命令语法printf:printf?format-string?[arguments...]

your_name="run"#?use双引号用于括起greeting="greeting,?"$your_name"?!"greeting_1="hello,?${your_name}?!"echo?$greeting$greeting_1#?使用单引号串联greeting_2='hello,?'$your_name'?!'greeting_3='hello,?${your_name}?!'echo?$greeting_2$greeting_3输出:hello,?run?!?hello,?run?!hello,?run?!?hello,?${your_name}?!8Printf转义序列描述\a警告字符,通常为ASCII单词BEL\bback\c抑制(不显示)输出结果中的任何尾随换行符(仅在由%b格式说明符控制的参数字符串中有效)以及参数中的任何剩余字符以及任何后续参数。
忽略格式字符串中的任何剩余字符后\f换页\n换行\r回车\t水平制表符\v垂直制表符\正斜杠字符\ddd表示具有1到3位八进制值的字符。
命令

Shell中的测试命令用于检查给定条件是否为真。

等于则为真-gt大于为真-ge大于等于为真-Lt小于等于为真-le小于等于为真11.2字符串测试参数说明=true如果等于=true如果不等于-zstring如果字符串长度为!0,将为true-nstringstring如果长度不为零则为True11.3文件测试参数说明-efilename如果文件存在则为true-rfilename如果文件存在且可读则为True-wfilename如果文件存在且可写则为True-xfilename如果文件存在并且可执行则为真-sfilename如果文件存在并且至少有一个字符则为True为true-d如果文件存在且为目录,则文件名为true-f如果文件存在,则文件名为true-C如果文件存在且为特殊字符文件,则文件名为true-b如果文件存在且为特殊字符文件,则文件名为true特殊的块文件12、Shell函数

shell中的函数定义格式如下:

your_name="run"#?使用引号double绑定greeting="greeting,?"$your_name"?!"greeting_1="greeting,?${your_name}?!"echo?$greeting$greeting_1#?使用单引号引起来greeting_2='hello,?'$your_name'?!'greeting_3='hello,?${your_name}?!'echo?$greeting_2$greeting_3输出:hello,?run?!?,?run?!hello,?run?!?hello,?${your_name}?!9

注意:

的返回值函数是通过$?获得的

所有函数必须在使用前定义。
这意味着该函数必须放置在脚本的开头,并且在shell解释器首先检测到它之前不能使用。
调用函数只需使用其函数名称。

函数参数

在Shell中,调用函数时可以将参数传递给函数。
在函数体内,参数值以$n的形式获取。
参数处理|说明?||----------------|--------------------------------||$#?|传递给脚本或函数的参数数量||$?|将传递给脚本的所有参数显示为单个字符串||$$?|脚本方向ID号当前进程?||$!?|使用时后台运行的最后一个进程的ID号。

0表示没有错误,任何其他值表示有错误

原文:https://juejin.cn/post/7101098366871797773

Linux最常用的Shell命令

有些人仍然有这样的愚蠢想法:要使用Linux,就必须使用Linuxshell命令。
废话!您不需要了解任何Linux命令,如ps、grep、ls等,但您仍然可以使用许多现代Linux桌面发行版。
Linux系统管理员与桌面用户不同,他们不像桌面用户那样使用Cinnamon、GNOME、Unity或KDE。
他们一直使用Linux命令。
对于桌面用户来说,如果了解一些Linux命令,就可以更好地使用Linux,体验它的魅力。
以下是一些:Shell基础知识:您可以通过打开Linux终端来执行Shell命令。
Shell有很多种类型,例如CSH、BourneShell和KornShell。
在大多数当前的Linux发行版中,默认shell通常是Bourneagainshell(bash)。
要查看您拥有哪种Shell,请执行以下命令echo$SHELL在Linux中,$符号代表shell变量。
所有shell都以这种方式使用变量。
有一些shell变量在系统启动时具有默认值。
例如,$SHELL是;echo命令的作用是打印输入。
如果您的输入对shell有特殊含义,例如shell变量,它将输出该变量的值。
一件重要的事情是您要注意文本中大写字母的使用。
例如,ls是DOSdir命令的Linux版本。
该命令列出当前工作目录中的文件。
如果您输入LS,您只会收到“未找到命令”错误消息。
Linuxshell命令的另一个重要的事情是您可以将命令串在一起。
从第一天起,这就是Unix/Linux中的一个很好的功能。
链接命令最简单的方法是使用“|”,我们称之为“管道”。
第一个命令的输出是下一个命令的输入。
Linux命令有自己的语法规则:基本语法是这样的:命令-选项文件例如:ls-la该命令行的含义是输出当前目录下所有文件的文件名,l代表“long”,a代表“全部”,加上l选项你会发现输出的内容更加丰富,不仅包括文件名,还包括文件的访问权限、属主、所属组等。
你会发现,如果当前目录下有很多文件,这个命令会在屏幕上输出很多信息。
现在是“管道”发挥作用的时候了。
ls-la|more您将在屏幕上看到以下消息:您还可以对大多数Linux命令使用通配符。
通配符可以表示文件名中的任何未知字符或字符串。
例如,*代表任意字符串,?代表单个字符。
例如: