SHELL相关

 

目录

 

一、shell概念:

1.1、Linux下常用的命令行程序:

1.2、命令行提示符

1.3、命令类型

1.4、PATH变量

1.5、shell脚本执行方法

1.6、变量

1.7、运算符

1.8、条件判断

1.9、流程控制

1.10、read从控制台输入

1.11、函数

1.12、正则表达式

二、相关命令

2.1、查看系统所有shell

2.2、查看系统当前使用的shell

2.3、查看当前shell的ID

三、相关操作

3.1、当想要退出当前的shell会话时


 

一、shell概念:

因为内核不提供和用户的交互功能,所以需要一个程序提供这种功能,这种程序分为两种:命令行(CLI)和图形界面(GUI)

 

  1. 在类UNIX中,提供CLI的交互程序,我们统称为shell
  1. Shell脚本以#!/bin/bash 开头(指定解析器)

 

1.1、Linux下常用的命令行程序:

  1. bash :redhat 默认shell,开源,基于GPL
  2. dash :ubuntu 默认 shell

 

常见shell程序:

  1. /bin/bash 该用户可用shell进行人机交互(一般为root及普通用户)
  2. /sbin/nologin 该用户不可用shell进行人机交互(一般为系统用户)

 

1.2、命令行提示符

[ 登陆用户名@主机名 当前目录 ] #/$

 

  1. # 表示是 root 用户
  2. $ 表示是普通用户
  3. 方括号里的提示符是由PS1变量展示

 

1.2.1、查看命令提示符的格式

# echo $PS1

b9ab7de488eb4b079c5059b21d892823.png

 

1.3、命令类型

1.3.1、内建命令

    shell自带命令

 

1.3.2、外置命令

    非shell自带,外部的一个可执行文件

 

  1. 判断一个命令式内建还是外置:# type 命令
  2. 查找一个命令的可执行文件路径: # which 命令
  3. 查找关键字文件位置(该指令只能用于查找二进制文件、源代码文件和man手册页): # whereis 命令

 

1.4、PATH变量

当我们执行一条命令时,shell程序就会在PATH变量指定的路径中,从左到右去寻找,如果没找到,则会提示找不到这个命令。

 

1.4.1、查看PATH值

# echo $PATH

 

1.4.2、查看缓存的命令

# hash (hits:表示命中的次数,也就是被执行了多少次)

975e3006b80543e4af6bb00ad2375c0a.png

 

1.4.3、清除缓存

(比如将/usr/bin/touch 命令移到其他位置,如果有缓存,还会到/usr/bin/目录下找touch 命令,则会报错,这时就需要清楚缓存)

# hash -r

 

1.5、shell脚本执行方法

1.5.1、采用 bash 或 sh+脚本的相对路径或绝对路径(不用赋予脚本+x 权限)

本质是 bash 解析器执行脚本,所以脚本本身不需要执行权限

9e03c2d8980c4e6189ad9dffb592955d.png

 

1.5.2、采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)

本质是脚本需要自己执行,所以需要执行权限

283fe346f8e64e1f9f2788dd2067ca19.png

 

1.5.3、在脚本的路径前加上 . 或者 source

4e7341b1e98d43eca3af1586274a594a.png

 

 

 

1.5.4、三种方法的区别

用sh或者bash执行脚本的时候

7d06b328658940c2bce5d4395399937e.png

 

用. 或者 source 执行脚本的时候

aff7d94dd9e14b9882c08252fc284c3a.png

 

 

b8b33f6299204c99a8053d400d5329e2.png

6fe8b5d6d4764956a552e8961218e26c.png

 

前两种方式都是在当前 shell 中打开一个子 shell 来执行脚本内容,当脚本内容结束,则子 shell 关闭,回到父 shell 中。

第三种,也就是使用在脚本路径前加“.”或者 source 的方式,可以使脚本内容在当前shell 里执行,而无需打开子 shell!这也是为什么我们每次要修改完/etc/profile 文件以后,需要 source 一下的原因。

开子 shell 与不开子 shell 的区别就在于,环境变量的继承关系,如在子 shell 中设置的当前变量,父 shell 是不可见的。

 

 

 

 

 

 

1.6、变量

1.6.1、系统定义变量

常用系统变量

$HOME、$PWD、$SHELL、$USER 等

 

 

显示所有变量

# set

 

查看系统变量

# env

 

 

1.6.2、自定义变量

1.6.2.1、基本语法和规则

  1. 定义变量:变量名=变量值,注意,=号前后不能有空格
  2. 撤销变量:unset 变量名
  3. 声明静态变量:readonly 变量,注意:不能 unset
  1. 单引号’’中,如果有$变量名称,不会输出变量值,双引号中会输出变量值
  2. 变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建

议大写。

  1. 在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算。
  2. 变量的值如果有空格,需要使用双引号或单引号括起来

1.6.2.2、将局部变量设置成全局变量

# export 变量名称

在父shell定义的全局变量,可以在子shell中查看,但是子shell中不能修改

 

1.6.2.3、只读变量

# readonly 变量名称=变量数值

 

查看所有只读变量

# readonly -p

 

1.6.3、特殊变量

1.6.3.1、$n

功能描述:n 为数字,$0 代表该脚本名称,$1-$9 代表第一到第九个参数,十以

上的参数,十以上的参数需要用大括号包含,如${10}

e83e349f03fe438a9e77976543a3a4c0.png

 

1.6.3.2、$#

功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及

加强脚本的健壮性

 

 

 

1.6.3.3、$* 和 $#

$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)

$@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)

5b85b0494c744057a83ddf95efb28cc3.png

 

1.6.3.4、$?

功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。

 

 

1.7、运算符

 

$((运算式)) 或 $[运算式]

 

 

1.8、条件判断

基本语法

  1. test condition
  2. [ condition ](注意 condition 前后要有空格)

注意:条件非空即为 true,[ dasfdsa ]返回 true,[ ] 返回 false。

 

常用判断条件

  1. 两个整数之间比较

-eq 等于(equal) -ne 不等于(not equal)

-lt 小于(less than) -le 小于等于(less equal)

-gt 大于(greater than) -ge 大于等于(greater equal)

注:如果是字符串之间的比较 ,用等号“=”判断相等;用“!=”判断不等。

 

  1. 按照文件权限进行判断

-r 有读的权限(read)

-w 有写的权限(write)

-x 有执行的权限(execute)

 

  1. 按照文件类型进行判断

-e 文件存在(existence)

-f 文件存在并且是一个常规的文件(file)

-d 文件存在并且是一个目录(directory)

f36d728543e8472689a178e9271e7045.png

 

  1. 多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一

条命令执行失败后,才执行下一条命令)

55f52f1ad128450c849f39f1e50ebcdf.png

防止$1值为空时,程序报错

800cdc2f24764d48b06f18f67cd95e07.png

 

 

-a  and -o  or

d422bbb63f0c41dbae7c08e50783f0b1.png

 

1.9、流程控制

1.9.1、If判断

单分支

bddebe4c58164a6caa7ba2150aab2003.png

 

多分支

63e82010275b4b4db3591f8be5407ed2.png

 

Tips:

  1. [ 条件判断式 ],中括号和条件判断式之间必须有空格
  2. if 后要有空格

 

c93ecc0b015c42629d033e5ca1abc3cb.png

 

1.9.2、case语句

ac638840620143fc9230505cdc0cfa76.png

 

 

Tips:

  1. case 行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
  2. 双分号“;;”表示命令序列结束,相当于 java 中的 break。
  3. 最后的“*)”表示默认模式,相当于 java 中的 default

1.9.3、for循环

97c660f0b43a462e8b0a94b4003efa00.png

练习:

 

de5f4dc3006941a7887af2735b65ff4e.png

 

c0751d8650574869a5fede721e68f524.png

 

练习:

6154962082c94d6181357a0c83dd4f8b.png

 

1.9.4、while循环

 

2aa0cc7955604120bf4dc7c5d638889e.png

54cacfeec8514acca2c327461b9b2a74.png

 

 

1.10、read从控制台输入

基本语法、

f0599f0625b94b7d8647f43a7ced06c6.png

 

 

 

1.11、函数

1.11.1、系统函数

1.11.1.1、basename

基本语法

basename [string / pathname] [suffix] (功能描述:basename 命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。

basename 可以理解为取路径里的文件名称

选项:

suffix 为后缀,如果 suffix 被指定了,basename 会将 pathname 或 string 中的 suffix 去掉。

 

6a0f575e7485499aa635373f38453149.png

 

 

1.11.1.2、dirname

dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名

(非目录的部分),然后返回剩下的路径(目录的部分))

dirname 可以理解为取文件路径的绝对路径名称

 

b640dc971e1743309cc5875f3bb56e54.png

 

1.11.2、自定义函数

基本语法

[ function ] funname[()]

{

Action;

[return int;]

}

 

Tips:

  1. 必须在调用函数地方之前,先声明函数,shell 脚本是逐行运行。不会像其它语言一

样先编译。

  1. 函数返回值,只能通过$?系统变量获得,可以显示加:return 返回,如果不加,将

以最后一条命令运行结果,作为返回值。return 后跟数值 n(0-255)

ccd63d61919548c8a2876723946fe7d5.png

 

 

1.12、正则表达式

正则表达式使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。在很多文

本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。在 Linux 中,grep,sed,awk 等文本处理工具都支持通过正则表达式进行模式匹配。

 

7708ae47fd7d49a68008a1eaffbb1154.png

c2578f55a26342ad94f3f51ee29847bc.png

 

533bf6c022a449a99ec0b6c4897632dc.png

 

 

二、相关命令

2.1、查看系统所有shell

# chsh -l  或 # cat /etc/shells

aed63c2ed94f44908727ec4e709f1f86.png

 

2.2、查看系统当前使用的shell

# echo $SHELL  或 # ps

45c38d14e16b46e6a2f5c4007c07dc4b.png

 

2.3、查看当前shell的ID

# echo $$

 

三、相关操作

3.1、当想要退出当前的shell会话时

 

  1. 可以输入命令exit 
  2. logout命令
  3. 使用快捷键Ctrl+D来结束会话、

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值