Shell简单介绍

Shell概述

什么是Shell

Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。

Shell还是一个功能强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。

Shell分类

  1. Bourne Shell:从1979年起Unix就开始使用Bourne Shell,Bourne Shell的主文件名为sh。

  2. C Shell:C Shell主要在BSD版的Unix系统中使用,其语法和C语言相似而得名。

    Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主要包括sh, ksh, Bash, psh, zsh;C家族主要包括:csh,tcsh.

  3. Bash:Bash和sh兼容,现在使用的Linux就是使用Bash作为用户的基本Shell。

Linux中支持的Shell

/etc/shells

image-20210620212843035

Shell脚本的执行方式

echo输出命令

echo [选项] 输出内容

常用选项

-e:支持反斜线\控制的字符转换

image-20210620213620262

echo也支持颜色输出:

echo -e "\e[1; [颜色代码] [输出内容] \e[0m"

颜色代码

30m:黑色

31m:红色

32m:绿色

33m:黄色

34m:蓝色

35m:洋红

36m:青色

37m:白色

操作截图

image-20210620214625430

第一个脚本

vim hello.sh

键入以下内容:

image-20210620215308099

说明:第一行#!/bin/bash不能省略,不是注释内容!

执行脚本

【推荐】方式一:

赋予执行权限,直接运行,

chmod 755 hello.sh

./hello.sh

image-20210620215720631

方式二:

通过bash调用执行脚本,可以连执行权限都可以不用设置

bash hello.sh

image-20210620215818660

Bash的基本功能

历史命令与命令补全

history [选项] [历史命令保存文件]

常用选项

-c:清空历史命令

-w:把缓存中的历史命令写入到历史命令保存文件,默认位置~/.bash_history

历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中进行修改!

image-20210620221409490

历史命令的调用

  • 使用上、下箭头调用以前的历史命令
  • 使用!n重复执行第n条历史命令
  • 使用!!重复执行上一条命令
  • 使用!字串重复执行最后一条以该字串开头的命令

命令与文件补全

在Bash中,命令与文件补全是非常方便与常用的功能,我们只要在输入命令或文件时,按Tab键,就会自动进行补全。

命令别名和常用快捷键

命令别名

alias 别名='原命令'

定义别名,但是此种方式定义的别名只会临时生效。

alias

查询命令别名

image-20210620222615496

命令的执行顺序
  1. 第一顺序执行用绝对路径或相对路径执行的命令。
  2. 第二顺序执行别名。
  3. 第三顺序执行Bash的内部命令。
  4. 第四顺序执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令。
让别名永久生效

需要写入下面的文档中:

vim ~/.bashrc

删除别名

unalias 别名

Bash常用快捷键

image-20210620223656227

输入输出重定向

标准输入输出

设备设备文件名文件描述符类型
键盘/dev/stdin0标准输入
显示器/dev/stdout1标准输出
显示器/dev/stderr2标准错误输出

输出重定向

image-20210620224507931

image-20210620225436444

输入重定向

wc [选项] [文件名]

常用选项:

-c:统计字节数

-w:统计单词数

-l:统计行数

wc

统计下面输入的内容,按Ctrl+D结束输入,得到的结果分别代表:行数,单词数(包含换行符),字节数。

image-20210620231239355

命令 < 文件输入

把文件作为命令的输入

image-20210620231832777

多命令顺序执行与管道符

多命令顺序执行

多命令执行符格式作用
;命令1;命令2多个命令顺序执行,命令之间没有任何逻辑联系
&&命令1&&命令2逻辑与。当命令1正确执行,命令2才会执行;当命令1执行不正确,则命令2不会执行
||命令1||命令2逻辑或。当命令1执行不正确,命令2才会执行;当命令1执行正确,命令2不会执行。
dd命令

dd if=输入文件 of=输出文件 bs=字节数 count=个数

选项

if=输入文件:指定原文件或原设备

of=输出文件:指定目标文件或目标设备

bs=字节数:指定一次输入/输出多少字节,即把这些字节看做一个数据块

count=个数:指定输入/输出多少个数据块

管道符|

命令1 | 命令2

命令1 的正确输出作为 命令2 的操作对象。

命令1必须有正确的输出命令2才能执行

grep

grep [选项] 搜索内容 文件名

常用选项:

-i:忽略大小写

-n:输出行号

-v:反向查找

--color=auto:搜索出的关键字用颜色显示

通配符和特殊符号

通配符

通配符作用
?匹配一个任意字符
*匹配0个或任意多个任意字符,也就是可以匹配任何内容
[]匹配括号中的任意一个字符。例如:[abc]代表一定匹配一个字符,或者是a,或者是b,或者是c
[-]匹配括号中任意一个字符,-代表一个范围。例如:[a-z]代表匹配一个小写字母
[^]逻辑非。代表匹配不是括号中的一个字符。例如:[^0-9]代表匹配一个不是数字的字符

通配符是用来匹配文件名的!

image-20210621095029176

Bash中的其它特殊符号

符号作用
''单引号。在单引号中的所有特殊符号,如$和`` `都没有特殊含义
""双引号。在双引号中特殊符号都没有特殊含义,但是$、`` `是例外,拥有”调用变量的值“,”引用命令“和”转义符“的特殊含义
``反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。和$()作用一样,不过推荐使用$(),因为反引号非常容易看错。
$()和反引号作用一样,用来引用系统命令
#在Shell脚本中,#开头的行表示注释
$用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值
\转义符。跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出$符号,而不是当作变量引用

image-20210621111201545

Bash的变量

用户自定义的变量

什么是变量

变量是计算机内存的单元,其中存放的值可以改变。当Shell脚本需要保存一些信息时,如一个文件名或是一个数字,就把它存放在一个变量中。每个变量有一个名字,所以很容易引用它。使用变量可以保存有用的信息,使系统获知用户相关设置,变量也可以用于保存暂时信息。

变量设置规则

  • 变量名可以由字母、数字和下划线组成,但是不能以数字开头。如果变量名是2name,则是错误的。
  • 在Bash中,变量的默认类型都是字符串类型,如果要进行数值计算,则必须指定变量类型为数值型。
  • 变量用等号连接值,等号左右两侧不能有空格。
  • 变量的值如果有空格,需要使用单引号或者双引号包括。
  • 在变量的值中,可以使用\转义符。
  • 如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含$变量名或使用${变量名}包含。
  • 如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令。
  • 环境变量名建议大写,便于区分。

变量的分类

  • 用户自定义变量

    1. 变量定义:变量名=变量值

    2. 变量叠加:

      image-20210621120044705

    3. 查看变量:set

    4. 删除变量:unset 变量名

  • 环境变量:这种变量中主要保存的是系统操作环境相关的数据。

  • 位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。

  • 预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。

环境变量

环境变量是什么

用户自定义的变量只在当前的Shell中生效,而环境变量会在当前的Shell和这个Shell的所有子Shell中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的Shell中生效。

设置环境变量

声明变量:export 变量名=变量值

查询变量:env

删除变量:unset 变量名

image-20210621205321061

系统常见环境变量

  • PATH:系统查找命令的路径

image-20210621205916063

添加自己的环境变量

PATH="$PATH":[要添加的环境变量]

  • PS1:定义系统提示符的变量

PS1无法使用env指令来查看,只能使用set看到

image-20210621205826172

image-20210621210557836

image-20210621211003520

位置参数变量

位置参数变量作用
$nn为数字,$0代表命令本身,$1~$9代表第1到9个参数,10及以上的参数需要使用大括号包含,如${10}
$*这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@这个变量也代表命令行中所有的参数,不过$@把每个参数区别对待
$#这个参数代表命令行中所有参数的个数

关于$*$@的区别

image-20210621213644303

#!/bin/bash

# 观察 $@ 和 $* 的区别

echo "第一个for循环"
for i in "$*"
        do
                echo $i
        done

echo "第二个for循环"
for y in "$@"
        do
                echo $y
        done

执行结果

image-20210621213733548

预定义变量

预定义变量作用
$?最后一次的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确。
$$当前进程的进程号(PID)
$!后台运行最后一个进程的进程号(PID)

接收键盘输入

read [选项] [变量名]

选项:

-p 提示信息:在等待read输入时,输出提示信息

-t 秒数:read指令会一直等待用户输入,使用此选项可以制定等待时间

-n 字符数:read指令只接收指定的字符数,就会执行

-s:隐藏输入的数据,适用于机密信息的输入

#!/bin/bash

# 输入姓名,等待30秒,把用户输入保存到变量name中
read -t 30 -p "请输入姓名:" name
echo "刚刚输入的姓名是:$name"

# 输入年龄,年龄是隐私,使用-s选项隐藏输入
read -s -t 30 -p "请输入年龄:" age
echo -e "\n"
echo "刚刚输入的年龄是:$age"

# 输入性别,使用-n选项,只接受一个字符就会执行
read -n 1 -t 30 -p "请输入性别(M/F):" gender
echo -e "\n"
echo "刚刚输入的性别是:$gender"

image-20210621220350577

Bash的运算符

数值运算和运算符

在Bash中,无法直接使用+ - * /进行数值运算

image-20210622163101028

方法一:declare声明变量类型

declare [+/-] [选项] 变量名

选项

-:给变量设定类型属性

+:取消变量的类型属性

-i:将变量声明为整数型

-x:将变量声明为环境变量

-p:显示指定变量的被声明类型

image-20210622163643467

实现上面的数值运算

image-20210622163842709

方法二:exprlet数值运算工具

实现上面的数值运算

image-20210622164148090

上面的+两侧必须有空格

【推荐】方法三:$((运算式))$[运算式]

image-20210622164835472

运算符

image-20210622165010378

变量测试与内容替换

image-20210622165239272

测试表达式x=${y-新值}

image-20210622165839813

image-20210622170010230

image-20210622170046685

环境变量配置文件

环境变量配置文件简介

环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,比如PATHHISTSIZEPS1HOSTNAME等默认环境变量。

source 配置文件. 配置文件

配置文件直接立即生效

常见的环境变量配置文件

  • /etc/profile
  • /etc/profile.d/*.sh
  • /etc/bashrc
  • ~/.bash_profile
  • ~/.bashrc

/etc下的配置文件会对任何登录用户都生效

环境变量配置文件作用

环境变量配置文件的生效顺序

image-20210622172427943

其中,/etc/profile文件作用:

  • USER变量
  • LOGNAME变量
  • MAIL变量
  • PATH变量
  • HOSTNAME变量
  • HISTSIZE变量
  • umask
  • 调用/etc/profile.d/*sh文件

其它配置文件和登录信息

注销时生效的环境变量配置文件

~/.bash_logout

其它配置文件

~/bash_history

Shell登录信息

本地终端欢迎信息:/etc/issue

image-20210622174031199

远程终端欢迎信息:/etc/issue.net

  • 转义符在/etc/issue.net文件中不能使用
  • 是否显示欢迎信息,由ssh的配置文件/etc/ssh/sshd_config决定,加入Banner /etc/issue.net行才能显示(需要重启ssh服务)

登录后欢迎信息:/etc/motd

不管是本地登录,还是远程登录,都可以显示此欢迎信息。

其中,/etc/profile文件作用:

  • USER变量
  • LOGNAME变量
  • MAIL变量
  • PATH变量
  • HOSTNAME变量
  • HISTSIZE变量
  • umask
  • 调用/etc/profile.d/*sh文件

其它配置文件和登录信息

注销时生效的环境变量配置文件

~/.bash_logout

其它配置文件

~/bash_history

Shell登录信息

本地终端欢迎信息:/etc/issue

image-20210622174031199

远程终端欢迎信息:/etc/issue.net

  • 转义符在/etc/issue.net文件中不能使用
  • 是否显示欢迎信息,由ssh的配置文件/etc/ssh/sshd_config决定,加入Banner /etc/issue.net行才能显示(需要重启ssh服务)

登录后欢迎信息:/etc/motd

不管是本地登录,还是远程登录,都可以显示此欢迎信息。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值