Error[8]: Undefined offset: 281, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

目录

Bash Shell

Shell 简介

Bash的功能和特性

Bash变量

定义:

read  命令

declare  命令

unset  命令

Shell 特殊变量及其含义

重定向基本概念

连续执行命令

 管道命令

命令历史记录

Shell脚本

执行方式:

脚本状态码

算术运算

test条件测试

关系运算

字符串运算

[] 条件测试


Bash Shell Shell 简介

Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质

用户通过 Shell 来使用 Linux,不启动 Shell 的话,用户就没办法使用 Linux;Shell 就是一个“中间商”,它在用户和内核之间“倒卖”数据

进入 Shell 的方法是让 Linux 系统退出图形界面模式,进入控制台模式,这种模式称为 Linux 控制台

Bash的功能和特性

历史命令:保存执行过的命令,可以快速重复执行(history)

命令别名:将长命令简化为短命令,或用习惯用法代替(--all(长格式) –l(短格式))

命令和文件路径补全:通过Tab键快速输入命令名或路径名

通配符:快速查找和处理文件

管道和重定向:最常使用的 *** 作之

Bash变量 定义:

定义变量时通常不需要指明类型,直接赋值就可以

用“=”连接变量名和变量值;设置变量值时,“=”左右不能直接连接空格

在 Bash shell 中,每一个变量的值都是字符串(可以使用 Shell declare 关键字显式定义变量的类型)

使用:

两种形式:$variable_name  或  ${variable_name}

使用echo 命令测试

注:

$variable_name定义的时候,定义变量最好采用variable_name=""带引号的形式

${variable_name}写法比较规范,定义变量时不带引号也没关系

规则:

1. 变量名由字母、数字和下划线组成

2. 必须以字母或者下划线开头,首字符不能是数字

3. 不能使用Shell里的关键字

4. 单双引号不同

单引号' '包围变量的值时,单引号里面是什么就输出什么,即使内容中有变量和命令也会把它们原样输出

双引号" "包围变量的值时,输出时会先解析里面的变量和命令,而不是把双引号中的变量名和命令原样输出

5. 转义符“\”将特殊字符转义为一般字符

6. 修改变量值

为变量追加新内容,建议使用  ”$variable_name ”    ${variable_name }  的形式

[an@localhost 20220505]$ var='abc'      //定义变量
[an@localhost 20220505]$ echo $var      //查看变量值
abc
[an@localhost 20220505]$ var1=niu
[an@localhost 20220505]$ var2=zhi
[an@localhost 20220505]$ var3=an
[an@localhost 20220505]$ echo $var1
niu
[an@localhost 20220505]$ echo ${var2}
zhi
[an@localhost 20220505]$ echo $var3
an

[an@localhost 20220505]$ var3="num is $var"   //双引号用法
[an@localhost 20220505]$ echo $var3
num is abc
[an@localhost 20220505]$ var3='num is $var'   //单引号用法
[an@localhost 20220505]$ echo $var3
num is $var

[an@localhost 20220505]$ var1=niu\ zhi\ wei   //转义符
[an@localhost 20220505]$ echo $var1
niu zhi wei

[an@localhost 20220505]$ echo $var2
zhi
[an@localhost 20220505]$ var2="$var2"\ wei    //修改值,追加内容wei
[an@localhost 20220505]$ echo $var2
zhi wei
read  命令

选项

说明

-a array

把读取的数据赋值给数组 array,从下标 0 开始。

-d delimiter

用字符串 delimiter 指定读取结束的位置,而不是一个换行符(读取到的数据不包括 delimiter)。

-e

在获取用户输入的时候,对功能键进行编码转换,不会直接显式功能键对应的字符。

-n num

读取 num 个字符,而不是整行字符。

-p prompt

显示提示信息,提示内容为 prompt。

-r

原样读取(Raw mode),不把反斜杠字符解释为转义字符。

-s

静默模式(Silent mode),不会在屏幕上显示输入的字符。当输入密码和其它确认信息的时候,这是很有必要的。

-t seconds

设置超时时间,单位为秒。如果用户没有在指定时间内输入完成,那么 read 将会返回一个非 0 的退出状态,表示读取失败。

-u fd

使用文件描述符 fd 作为输入源,而不是标准输入,类似于重定向。

[an@localhost 20220505]$ read var
132           // 在键盘上输入这一行然后按回车键
[an@localhost 20220505]$ read -p "your information:" name age   // 设置输入提示
your information:an 20
[an@localhost 20220505]$ echo $var
132
[an@localhost 20220505]$ echo $name
an
[an@localhost 20220505]$ echo $age
20
declare  命令

使用declare命令修改变量的数据类型

选项

含义

-f [name]

列出之前由用户在脚本中定义的函数名称和函数体。

-F [name]

仅列出自定义函数名称。

-g name

Shell 函数内部创建全局变量。

-p [name]

显示指定变量的属性和值。

-a name

声明变量为普通数组。

-A name

声明变量为关联数组(支持索引下标为字符串)。

-i name 

将变量定义为整数型。

-r name[=value] 

将变量定义为只读(不可修改和删除),等价于 readonly name。

-x name[=value]

将变量设置为环境变量,等价于 export name[=value]。

//变量默认为字符串
[an@localhost ~]$ var=8/5
[an@localhost ~]$ echo $var
8/5
[an@localhost ~]$ var=3*7
[an@localhost ~]$ echo $var
3*7

//使用declare定义变量数据类型
[an@localhost ~]$ declare -i var   //-i声明为整型
[an@localhost ~]$ var=3*7
[an@localhost ~]$ echo $var
21
[an@localhost ~]$ var=8/5
[an@localhost ~]$ echo $var
1
/*
[an@localhost 20220505]$ declare -i var=3*7
[an@localhost 20220505]$ echo $var
21
*/
unset  命令

使用unset取消或删除变量,在unset命令后跟变量名即可

[an@localhost 20220505]$ echo $var
21
[an@localhost 20220505]$ echo $var1
niu zhi wei
[an@localhost 20220505]$ echo $var2
zhi wei
[an@localhost 20220505]$ echo $var3
num is $var

[an@localhost 20220505]$ unset var
[an@localhost 20220505]$ unset var3
[an@localhost 20220505]$ unset var2
[an@localhost 20220505]$ echo $var2
                                    //值为空

环境变量

*** 作系统内置的变量

使用env和export命令查看系统当前的环境变量

变量的作用范围

打开一个Bash窗口就在 *** 作系统中创建了一个Bash进程

在Bash窗口中执行的命令也都是进程(子进程)

子进程运行时,父进程一般处于“睡眠”状态

子进程执行完毕,父进程重新开始运行

[an@localhost 20220505]$ echo $$
12674                                // 父进程PID
[an@localhost 20220505]$ bash        // 使用bash命令创建子进程
[an@localhost 20220505]$ echo $$     // 子进程PID
13797
[an@localhost 20220505]$ exit        //退出子进程
exit
[an@localhost 20220505]$ echo $$
12674
Shell 特殊变量及其含义

变量

含义

当前脚本的文件名。

$n(n≥1)

传递给脚本或函数的参数。

n 是一个数字,表示第几个参数。例如,第一个参数是 ,第二个参数是 $#

传递给脚本或函数的参数个数。

$*

传递给脚本或函数的所有参数。

$@

传递给脚本或函数的所有参数。当被双引号

“ ”包含时,$@ $* 稍有不同。$?

返回上一个命令的状态码;一般用0表示成功,非0表示失败或异常

$$

查看当前Bash的进程号(PID)

重定向基本概念

输入重定向:

从键盘流向程序,如果改变了它的方向,数据就从其它地方流入        1. 输入重定向就是改变输入的方向,不再使用键盘作为命令输入的来源,而是使用文件作为命令的输入。

        2. 功能:将原来从键盘输入的数据改为从文件读取

符号

说明

command

将 

file 文件中的内容作为 command 的输入。command <

从标准输入(键盘)中读取数据,直到遇见分界符

END 才停止(分界符可以是任意的字符串,用户自己定义)。

command file2

file1 作为 command 的输入,并将 command 的处理结果输出到 file2。输出重定向:从程序流向显示器,如果改变了它的方向,数据就流向其它地方

        1. 输出重定向是指命令的结果不再输出到显示器上,而是输出到其它地方,一般是文件中。

        2. 在命令后输入

并且后跟一个文件名,对原文件的内容进行了大于号“>”“覆盖”,即清空原文件内容        3. 在命令后输入

并且后跟一个文件名,表示在原文件的基础上两个大于号“>>”“追加”新内容符 号

作 用

以覆盖的方式,把

command >file

command 的正确输出结果输出到 file 文件中。以追加的方式,把

command >>file

command 的正确输出结果输出到 file 文件中。连续执行命令

[an@localhost 20220505]$ pwd
/home/an/20220505
[an@localhost 20220505]$ pwd > pwd.result    // 将pwd命令结果输出到文件pwd.result中,自动创建文件pwd.result 
[an@localhost 20220505]$ cat pwd.result 
/home/an/20220505
[an@localhost 20220505]$ pwd >> pwd.result   // 追加内容
[an@localhost 20220505]$ cat pwd.result 
/home/an/20220505
/home/an/20220505

[an@localhost 20220505]$ touch aa
[an@localhost 20220505]$ vi aa
[an@localhost 20220505]$ cat aa
9*9
99*99
999*999
[an@localhost 20220505]$ bc < aa      // 从文件获得输入
81
9801
998001
[an@localhost 20220505]$ bc < aa > bb
[an@localhost 20220505]$ cat bb
81
9801
998001
命令间没有依赖关系

命令间用分号“;”分隔

适合于命令之间没有依赖关系的情况

不管前一条命令成功或失败,后一条命令都会执行

命令间有依赖关系

命令间用“&&”或“||” 连接

用“$?”查看前一条命令执行结果

 管道命令

功能:一个命令的输出成为另一个命令的输入

使用管道符号“|”连接两个命令,左侧命令的输出成为右侧命令的输入

命令历史记录

[an@localhost 20220505]$ ls | grep aa   //查看文件 aa 是否存在于当前目录下
aa
[an@localhost 20220505]$ ls -al | grep aa > cc   //将上述管道命令的输出结果发送到文件cc
[an@localhost 20220505]$ cat cc
-rw-rw-r--.  1 an an   18 5月   5 18:13 aa
功能:

保存命令行窗口中执行过的命令以便后续查找或执行使用

history命令处理和历史命令相关的 *** 作HISTSIZE变量指定history命令最多可以显示的命令条数,默认值是1000

HISTFILESIZE变量指定历史命令文件最多可以保存的命令总数,默认值是1000

*** 作:

重复执行上一条命令

在命令行中输入“!!”或“!-1”可以快速执行上一条命令

“!-n”表示执行最近的第n条命令

按【Ctrl+P】或键盘的向上方向键调出最近一条命令,按回车键执行

通过命令编号执行历史命令

n

使用“!n”可以快速执行编号为通过命令关键字执行历史命令的历史命令

cmd

使用“!cmd ”可以查找最近一条以通过【Ctrl+R】组合键搜索历史命令开头的命令并执行

使用【Ctrl+R】组合键对历史命令进行搜索,按回车键即可执行

Shell脚本

扩展名sh代表 shell

#!/bin/bash
 
#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell;
后面的/bin/bash就是指明了解释器的具体位置

执行方式:

方式一:使用sh或bash命令执行脚本文件;不管脚本文件有没有可执行权限,都可以采用这种方式执行

方式二:使用source命令或点运算符“.”执行脚本文件,后跟脚本文件名

[an@localhost 20220505]$ sh text.sh //方式一 hello world ! [an@localhost 20220505]$ . text.sh //方式二 hello world ! [an@localhost 20220505]$ source text.sh //方式二 hello world !

脚本状态码
脚本文件执行结束,都会返回一个整数类型的状态码,表示脚本文件的执行结果

一般用0表示执行成功,用非0值表示异常结束

可以使用

“$?” 特殊变量查看状态码n

还可以使用exit命令指定返回值,形式为exit [an@localhost 20220505]$ cat -n text.sh 1 #!/bin/bash 2 echo "hello world !" [an@localhost 20220505]$ source text.sh hello world ! [an@localhost 20220505]$ echo $? 0 ,取值范围是0~255

算术运算
采用 

exp“$((   ))”的形式,内层的小括号中是算术表达式“$(( ))”只支持整数的算术运算

表达式中的变量可以不使用“$”前导符号

比较结果为真,表达式返回1,否则返回0

[an@localhost 20220505]$ echo $((9*9))
81

运算符包括“<” “>” “<=” “>=” “==” “!=”

test条件测试

[an@localhost 20220505]$ a=5
[an@localhost 20220505]$ b=10
[an@localhost 20220505]$ echo $((a > b))
0
[an@localhost 20220505]$ echo $((a != b))
1

主要用于判断一个表达式的真假,亦即表达式是否成立

如果表达式为真,test命令返回0值,否则返回一个非0值

使用 “$?”特殊变量获取test命令的返回值

关系运算

字符串运算

[an@localhost work]$ vi aaa.sh
[an@localhost work]$ cat aaa.sh 
#!/bin/bash
a=11 ; b=16
test $a -eq $b && echo "$a = $b" || echo "$a != $b"  // 若a = b 则返回a = b,否则返回a != b
test $a -gt $b && echo "$a > $b" || echo "$a <= $b"  // 若a = b 则返回a > b,否则返回a <= b
test $a -ge $b && echo "$a >= $b" || echo "$a < $b"  // 若a >= b 则返回a >= b,否则返回a < b

[an@localhost work]$ sh aaa.sh 
11 != 16
11 <= 16
11 < 16
[an@localhost work]$ vi aaa.sh [an@localhost work]$ cat aaa.sh #!/bin/bash a="centos" b="" test -z "$a" && echo "'$a' is null" || echo "'$a' is not null" // 若a 为空 则返回a is null,否则返回a is not null test -n "$b" && echo "'$b' is not null" || echo "'$b' is null" // 若b 非空 则返回b is not null,否则返回a is null test "$a" == "centos" && echo "'$a' = '$b'" || echo "'$a' != '$b'" // 若a == b 则返回a = b,否则返回a != b [an@localhost work]$ sh aaa.sh 'centos' is not null '' is null 'centos' != ''

[] 条件测试

 

 

test

命令也可以简写为[]表达式的格式有特别的规定: *** 作数、运算符及中括号要用空格分隔

[ expression ]  #

eg:注意[]expression之间的空格,这两个空格是必须的[an@localhost work]$ vi ccc.sh [an@localhost work]$ vi ccc.sh [an@localhost work]$ cat ccc.sh #!/bin/bash a="ccc.sh" b="nnzzww.txt" #判断文件a是不是普通文件 test -f "$a" && echo "$a: ordinary file " || echo "$a: not ordinary file" #判断文件a是不是存在且可读 test -r "$a" && echo "$a: readable " || echo "$a: not readable" #判断a创建时间是否比b新 test "$a" -nt "$b" && echo "$a is newer than $b" || echo "$b is newer than $a" [an@localhost work]$ sh ccc.sh ccc.sh: ordinary file ccc.sh: readable ccc.sh is newer than nnzzww.txt

[+++]

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Bash Shell_python_内存溢出

Bash Shell

Bash Shell,第1张

目录

Bash Shell

Shell 简介

Bash的功能和特性

Bash变量

定义:

read  命令

declare  命令

unset  命令

Shell 特殊变量及其含义

重定向基本概念

连续执行命令

 管道命令

命令历史记录

Shell脚本

执行方式:

脚本状态码

算术运算

test条件测试

关系运算

字符串运算

[] 条件测试


Bash Shell Shell 简介

Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质

用户通过 Shell 来使用 Linux,不启动 Shell 的话,用户就没办法使用 Linux;Shell 就是一个“中间商”,它在用户和内核之间“倒卖”数据

进入 Shell 的方法是让 Linux 系统退出图形界面模式,进入控制台模式,这种模式称为 Linux 控制台

Bash的功能和特性

历史命令:保存执行过的命令,可以快速重复执行(history)

命令别名:将长命令简化为短命令,或用习惯用法代替(--all(长格式) –l(短格式))

命令和文件路径补全:通过Tab键快速输入命令名或路径名

通配符:快速查找和处理文件

管道和重定向:最常使用的 *** 作之

Bash变量 定义:

定义变量时通常不需要指明类型,直接赋值就可以

用“=”连接变量名和变量值;设置变量值时,“=”左右不能直接连接空格

在 Bash shell 中,每一个变量的值都是字符串(可以使用 Shell declare 关键字显式定义变量的类型)

使用:

两种形式:$variable_name  或  ${variable_name}

使用echo 命令测试

注:

$variable_name定义的时候,定义变量最好采用variable_name=""带引号的形式

${variable_name}写法比较规范,定义变量时不带引号也没关系

规则:

1. 变量名由字母、数字和下划线组成

2. 必须以字母或者下划线开头,首字符不能是数字

3. 不能使用Shell里的关键字

4. 单双引号不同

单引号' '包围变量的值时,单引号里面是什么就输出什么,即使内容中有变量和命令也会把它们原样输出

双引号" "包围变量的值时,输出时会先解析里面的变量和命令,而不是把双引号中的变量名和命令原样输出

5. 转义符“\”将特殊字符转义为一般字符

6. 修改变量值

为变量追加新内容,建议使用  ”$variable_name ”    ${variable_name }  的形式

[an@localhost 20220505]$ var='abc'      //定义变量
[an@localhost 20220505]$ echo $var      //查看变量值
abc
[an@localhost 20220505]$ var1=niu
[an@localhost 20220505]$ var2=zhi
[an@localhost 20220505]$ var3=an
[an@localhost 20220505]$ echo $var1
niu
[an@localhost 20220505]$ echo ${var2}
zhi
[an@localhost 20220505]$ echo $var3
an

[an@localhost 20220505]$ var3="num is $var"   //双引号用法
[an@localhost 20220505]$ echo $var3
num is abc
[an@localhost 20220505]$ var3='num is $var'   //单引号用法
[an@localhost 20220505]$ echo $var3
num is $var

[an@localhost 20220505]$ var1=niu\ zhi\ wei   //转义符
[an@localhost 20220505]$ echo $var1
niu zhi wei

[an@localhost 20220505]$ echo $var2
zhi
[an@localhost 20220505]$ var2="$var2"\ wei    //修改值,追加内容wei
[an@localhost 20220505]$ echo $var2
zhi wei
read  命令

选项

说明

-a array

把读取的数据赋值给数组 array,从下标 0 开始。

-d delimiter

用字符串 delimiter 指定读取结束的位置,而不是一个换行符(读取到的数据不包括 delimiter)。

-e

在获取用户输入的时候,对功能键进行编码转换,不会直接显式功能键对应的字符。

-n num

读取 num 个字符,而不是整行字符。

-p prompt

显示提示信息,提示内容为 prompt。

-r

原样读取(Raw mode),不把反斜杠字符解释为转义字符。

-s

静默模式(Silent mode),不会在屏幕上显示输入的字符。当输入密码和其它确认信息的时候,这是很有必要的。

-t seconds

设置超时时间,单位为秒。如果用户没有在指定时间内输入完成,那么 read 将会返回一个非 0 的退出状态,表示读取失败。

-u fd

使用文件描述符 fd 作为输入源,而不是标准输入,类似于重定向。

[an@localhost 20220505]$ read var
132           // 在键盘上输入这一行然后按回车键
[an@localhost 20220505]$ read -p "your information:" name age   // 设置输入提示
your information:an 20
[an@localhost 20220505]$ echo $var
132
[an@localhost 20220505]$ echo $name
an
[an@localhost 20220505]$ echo $age
20
declare  命令

使用declare命令修改变量的数据类型

选项

含义

-f [name]

列出之前由用户在脚本中定义的函数名称和函数体。

-F [name]

仅列出自定义函数名称。

-g name

Shell 函数内部创建全局变量。

-p [name]

显示指定变量的属性和值。

-a name

声明变量为普通数组。

-A name

声明变量为关联数组(支持索引下标为字符串)。

-i name 

将变量定义为整数型。

-r name[=value] 

将变量定义为只读(不可修改和删除),等价于 readonly name。

-x name[=value]

将变量设置为环境变量,等价于 export name[=value]。

//变量默认为字符串
[an@localhost ~]$ var=8/5
[an@localhost ~]$ echo $var
8/5
[an@localhost ~]$ var=3*7
[an@localhost ~]$ echo $var
3*7

//使用declare定义变量数据类型
[an@localhost ~]$ declare -i var   //-i声明为整型
[an@localhost ~]$ var=3*7
[an@localhost ~]$ echo $var
21
[an@localhost ~]$ var=8/5
[an@localhost ~]$ echo $var
1
/*
[an@localhost 20220505]$ declare -i var=3*7
[an@localhost 20220505]$ echo $var
21
*/
unset  命令

使用unset取消或删除变量,在unset命令后跟变量名即可

[an@localhost 20220505]$ echo $var
21
[an@localhost 20220505]$ echo $var1
niu zhi wei
[an@localhost 20220505]$ echo $var2
zhi wei
[an@localhost 20220505]$ echo $var3
num is $var

[an@localhost 20220505]$ unset var
[an@localhost 20220505]$ unset var3
[an@localhost 20220505]$ unset var2
[an@localhost 20220505]$ echo $var2
                                    //值为空

环境变量

*** 作系统内置的变量

使用env和export命令查看系统当前的环境变量

变量的作用范围

打开一个Bash窗口就在 *** 作系统中创建了一个Bash进程

在Bash窗口中执行的命令也都是进程(子进程)

子进程运行时,父进程一般处于“睡眠”状态

子进程执行完毕,父进程重新开始运行

[an@localhost 20220505]$ echo $$
12674                                // 父进程PID
[an@localhost 20220505]$ bash        // 使用bash命令创建子进程
[an@localhost 20220505]$ echo $$     // 子进程PID
13797
[an@localhost 20220505]$ exit        //退出子进程
exit
[an@localhost 20220505]$ echo $$
12674
Shell 特殊变量及其含义

变量

含义

当前脚本的文件名。

$n(n≥1)

传递给脚本或函数的参数。

n 是一个数字,表示第几个参数。例如,第一个参数是 ,第二个参数是 $#

传递给脚本或函数的参数个数。

$*

传递给脚本或函数的所有参数。

$@

传递给脚本或函数的所有参数。当被双引号

“ ”包含时,$@ $* 稍有不同。$?

返回上一个命令的状态码;一般用0表示成功,非0表示失败或异常

$$

查看当前Bash的进程号(PID)

重定向基本概念

输入重定向:

从键盘流向程序,如果改变了它的方向,数据就从其它地方流入        1. 输入重定向就是改变输入的方向,不再使用键盘作为命令输入的来源,而是使用文件作为命令的输入。

        2. 功能:将原来从键盘输入的数据改为从文件读取

符号

说明

command

将 

file 文件中的内容作为 command 的输入。command <

从标准输入(键盘)中读取数据,直到遇见分界符

END 才停止(分界符可以是任意的字符串,用户自己定义)。

command file2

file1 作为 command 的输入,并将 command 的处理结果输出到 file2。输出重定向:从程序流向显示器,如果改变了它的方向,数据就流向其它地方

        1. 输出重定向是指命令的结果不再输出到显示器上,而是输出到其它地方,一般是文件中。

        2. 在命令后输入

并且后跟一个文件名,对原文件的内容进行了大于号“>”“覆盖”,即清空原文件内容        3. 在命令后输入

并且后跟一个文件名,表示在原文件的基础上两个大于号“>>”“追加”新内容符 号

作 用

以覆盖的方式,把

command >file

command 的正确输出结果输出到 file 文件中。以追加的方式,把

command >>file

command 的正确输出结果输出到 file 文件中。连续执行命令

[an@localhost 20220505]$ pwd
/home/an/20220505
[an@localhost 20220505]$ pwd > pwd.result    // 将pwd命令结果输出到文件pwd.result中,自动创建文件pwd.result 
[an@localhost 20220505]$ cat pwd.result 
/home/an/20220505
[an@localhost 20220505]$ pwd >> pwd.result   // 追加内容
[an@localhost 20220505]$ cat pwd.result 
/home/an/20220505
/home/an/20220505

[an@localhost 20220505]$ touch aa
[an@localhost 20220505]$ vi aa
[an@localhost 20220505]$ cat aa
9*9
99*99
999*999
[an@localhost 20220505]$ bc < aa      // 从文件获得输入
81
9801
998001
[an@localhost 20220505]$ bc < aa > bb
[an@localhost 20220505]$ cat bb
81
9801
998001
命令间没有依赖关系

命令间用分号“;”分隔

适合于命令之间没有依赖关系的情况

不管前一条命令成功或失败,后一条命令都会执行

命令间有依赖关系

命令间用“&&”或“||” 连接

用“$?”查看前一条命令执行结果

 管道命令

功能:一个命令的输出成为另一个命令的输入

使用管道符号“|”连接两个命令,左侧命令的输出成为右侧命令的输入

命令历史记录

[an@localhost 20220505]$ ls | grep aa   //查看文件 aa 是否存在于当前目录下
aa
[an@localhost 20220505]$ ls -al | grep aa > cc   //将上述管道命令的输出结果发送到文件cc
[an@localhost 20220505]$ cat cc
-rw-rw-r--.  1 an an   18 5月   5 18:13 aa
功能:

保存命令行窗口中执行过的命令以便后续查找或执行使用

history命令处理和历史命令相关的 *** 作HISTSIZE变量指定history命令最多可以显示的命令条数,默认值是1000

HISTFILESIZE变量指定历史命令文件最多可以保存的命令总数,默认值是1000

*** 作:

重复执行上一条命令

在命令行中输入“!!”或“!-1”可以快速执行上一条命令

“!-n”表示执行最近的第n条命令

按【Ctrl+P】或键盘的向上方向键调出最近一条命令,按回车键执行

通过命令编号执行历史命令

n

使用“!n”可以快速执行编号为通过命令关键字执行历史命令的历史命令

cmd

使用“!cmd ”可以查找最近一条以通过【Ctrl+R】组合键搜索历史命令开头的命令并执行

使用【Ctrl+R】组合键对历史命令进行搜索,按回车键即可执行

Shell脚本

扩展名sh代表 shell

#!/bin/bash
 
#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell;
后面的/bin/bash就是指明了解释器的具体位置

执行方式:

方式一:使用sh或bash命令执行脚本文件;不管脚本文件有没有可执行权限,都可以采用这种方式执行

方式二:使用source命令或点运算符“.”执行脚本文件,后跟脚本文件名

[an@localhost 20220505]$ sh text.sh //方式一 hello world ! [an@localhost 20220505]$ . text.sh //方式二 hello world ! [an@localhost 20220505]$ source text.sh //方式二 hello world !

脚本状态码
脚本文件执行结束,都会返回一个整数类型的状态码,表示脚本文件的执行结果

一般用0表示执行成功,用非0值表示异常结束

可以使用

“$?” 特殊变量查看状态码n

还可以使用exit命令指定返回值,形式为exit [an@localhost 20220505]$ cat -n text.sh 1 #!/bin/bash 2 echo "hello world !" [an@localhost 20220505]$ source text.sh hello world ! [an@localhost 20220505]$ echo $? 0 ,取值范围是0~255

算术运算
采用 

exp“$((   ))”的形式,内层的小括号中是算术表达式“$(( ))”只支持整数的算术运算

表达式中的变量可以不使用“$”前导符号

比较结果为真,表达式返回1,否则返回0

[an@localhost 20220505]$ echo $((9*9))
81

运算符包括“<” “>” “<=” “>=” “==” “!=”

test条件测试

[an@localhost 20220505]$ a=5
[an@localhost 20220505]$ b=10
[an@localhost 20220505]$ echo $((a > b))
0
[an@localhost 20220505]$ echo $((a != b))
1

主要用于判断一个表达式的真假,亦即表达式是否成立

如果表达式为真,test命令返回0值,否则返回一个非0值

使用 “$?”特殊变量获取test命令的返回值

关系运算

字符串运算

[an@localhost work]$ vi aaa.sh
[an@localhost work]$ cat aaa.sh 
#!/bin/bash
a=11 ; b=16
test $a -eq $b && echo "$a = $b" || echo "$a != $b"  // 若a = b 则返回a = b,否则返回a != b
test $a -gt $b && echo "$a > $b" || echo "$a <= $b"  // 若a = b 则返回a > b,否则返回a <= b
test $a -ge $b && echo "$a >= $b" || echo "$a < $b"  // 若a >= b 则返回a >= b,否则返回a < b

[an@localhost work]$ sh aaa.sh 
11 != 16
11 <= 16
11 < 16
[an@localhost work]$ vi aaa.sh [an@localhost work]$ cat aaa.sh #!/bin/bash a="centos" b="" test -z "$a" && echo "'$a' is null" || echo "'$a' is not null" // 若a 为空 则返回a is null,否则返回a is not null test -n "$b" && echo "'$b' is not null" || echo "'$b' is null" // 若b 非空 则返回b is not null,否则返回a is null test "$a" == "centos" && echo "'$a' = '$b'" || echo "'$a' != '$b'" // 若a == b 则返回a = b,否则返回a != b [an@localhost work]$ sh aaa.sh 'centos' is not null '' is null 'centos' != ''

[] 条件测试

 

 

test

命令也可以简写为[]表达式的格式有特别的规定: *** 作数、运算符及中括号要用空格分隔

[ expression ]  #

eg:注意[]expression之间的空格,这两个空格是必须的[an@localhost work]$ vi ccc.sh [an@localhost work]$ vi ccc.sh [an@localhost work]$ cat ccc.sh #!/bin/bash a="ccc.sh" b="nnzzww.txt" #判断文件a是不是普通文件 test -f "$a" && echo "$a: ordinary file " || echo "$a: not ordinary file" #判断文件a是不是存在且可读 test -r "$a" && echo "$a: readable " || echo "$a: not readable" #判断a创建时间是否比b新 test "$a" -nt "$b" && echo "$a is newer than $b" || echo "$b is newer than $a" [an@localhost work]$ sh ccc.sh ccc.sh: ordinary file ccc.sh: readable ccc.sh is newer than nnzzww.txt

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/939522.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-17
下一篇 2022-05-17

发表评论

登录后才能评论

评论列表(0条)

保存