栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Bash Shell

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Bash Shell

Bash Shell

Shell简介:

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

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

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

Bash的功能和特性:

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

命令别名:将长命令简化为短命令,或用习惯用法代替

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

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

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

Bash变量:

定义:

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

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

使用:

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

read命令

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

declare命令:

//变量默认为字符串
[mxr@localhost ~]$ var=8/5
[mxr@localhost ~]$ echo $var
8/5
[mxr@localhost ~]$ var=3*7
[mxr@localhost ~]$ echo $var
3*7
 
//使用declare定义变量数据类型
[mxr@localhost ~]$ declare -i var   //-i声明为整型
[mxr@localhost ~]$ var=3*7
[mxr@localhost ~]$ echo $var
21
[mxr@localhost ~]$ var=8/5
[mxr@localhost ~]$ echo $var
1


unset命令

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

[mxr@localhost 20220505]$ echo $var
21
[mxr@localhost 20220505]$ echo $var1
miao xin ru 
[mxr@localhost 20220505]$ echo $var2
xin ru
[mxr@localhost 20220505]$ echo $var3
num is $var
 
[mxr@localhost 20220505]$ unset var
[mxr@localhost 20220505]$ unset var3
[mxr@localhost 20220505]$ unset var2
[mxr@localhost 20220505]$ echo $var2
                                    //值为空

环境变量

操作系统内置的变量

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

变量的作用范围

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

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

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

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

[mxr@localhost 20220505]$ echo $$
12674                                // 父进程PID
[mxr@localhost 20220505]$ bash        // 使用bash命令创建子进程
[an@localhost 20220505]$ echo $$     // 子进程PID
13797
[mxr@localhost 20220505]$ exit        //退出子进程
exit
[mxr@localhost 20220505]$ echo $$
12674

shell特殊变量及其含义:

 重定向基本概念

输入重定向:从键盘流向程序,如果改变了它的方向,数据就从其他地方流入

1,输入重定向就是改变输入的方向,不再使用键盘作为命令输入的来源,而是使用文件作为命令的输入

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

 输出重定向:从程序流向显示器,如果改变了它的方向,数据就流向其他地方

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

2,在命令后输入大于号> 并且后跟一个文件名,对原文件的内容进行了覆盖

3,在命令后输入两个大于>>并且后跟一个文件名,表示在原文件的基础上追加新内容

[mxr@localhost 20220505]$ pwd
/home/mxr/20220505
[mxr@localhost 20220505]$ pwd > pwd.result    // 将pwd命令结果输出到文件pwd.result中,自动创建文件pwd.result 
[mxr@localhost 20220505]$ cat pwd.result 
/home/mxr/20220505
[mxr@localhost 20220505]$ pwd >> pwd.result   // 追加内容
[mxr@localhost 20220505]$ cat pwd.result 
/home/mxr/20220505
/home/mxr/20220505
 
[mxr@localhost 20220505]$ touch aa
[mxr@localhost 20220505]$ vi aa
[mxr@localhost 20220505]$ cat aa
9*9
99*99
999*999
[mxr@localhost 20220505]$ bc < aa      // 从文件获得输入
81
9801
998001
[mxr@localhost 20220505]$ bc < aa > bb
[mxr@localhost 20220505]$ cat bb
81
9801
998001

连续执行命令:

命令间没有依赖关系

命令间用分号;分隔

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

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

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

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

管道命令:

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

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

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

命令历史记录:

功能:保存命令行窗口中执行过的命令以便后续查找或执行

使用history命令处理和历史命令相关的操作

HISTSIZE变量指定history命令最多可以显示的命令条数,默认值是1000

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

操作:

重复执行上一条命令

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

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

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

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

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

通过命令关键字执行历史命令

使用“!cmd”可以查找最近一条以cmd开头的命令并执行

通过【CTRL+r】组合键搜索历史命令,按回车键即可执行

Shell脚本

 执行方式:

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

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

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

脚本状态码:

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

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

可以使用“$?”特殊变量查看状态码

[mxr@localhost 20220505]$ cat -n text.sh
     1	#!/bin/bash
     2	echo "hello world !"
[mxr@localhost 20220505]$ source text.sh 
hello world !
[mxr@localhost 20220505]$ echo $?
0

算术运算:

采用“$((exp))”的形式,内层的小括号中是算术表达式

 test测试

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

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

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

关系运算

[mxr@localhost work]$ vi aaa.sh
[mxr@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
 
[mxr@localhost work]$ sh aaa.sh 
11 != 16
11 <= 16
11 < 16

 字符串运算

[mxr@localhost work]$ vi aaa.sh
[mxr@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
 
[mxr@localhost work]$ sh aaa.sh 
'centos' is not null
'' is null
'centos' != ''
 

 []条件测试

test命令也可以简写为[]

表达式的格式有特别的规定:操作数、运算符及中括号要用空格分隔

eg:[ expression ]#注意[]和expression之间的空格,这两个空格是必须的

[mxr@localhost ~]$ cat ccc.sh
#!/bin/bash
a="ccc.sh"
b="mmxxrr.txt"
#判断文件a是不是普通文件
[ -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"

[mxr@localhost ~]$ sh ccc.sh
ccc.sh: ordinary file 
ccc.sh: 第 7 行:[: -r: 期待二元表达式
ccc.sh: not readable
ccc.sh: 第 9 行:[: 参数太多
mmxxrr.txt is newer than ccc.sh

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/883663.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号