vim编辑器与bash解释器(shell)

vim编辑器

在 LInux 的世界中,绝大部分的配置文件都是以 ASCII 的纯文本形态存在的,因此利用简单的文字编辑软件就可以修改配置了

基本上 vi 共分为三种模式:一般指令模式、编辑模式、指令列命令模式

  • 一般指令模式(command mode)

    以 vi 打开一个文件就直接进入一般指令模式了(默认模式,也简称一般模式)。

    在该模式中,可以使用「上下左右」按键移动光标,可以使用「删除字符」或「删除整列」来处理文件内容,也可以使用「复制、粘贴」

  • 编辑模式(insert mode)

    在一般模式中可以进行删除、复制、粘贴等动作,但是无法编辑文件内容。

    需要按下「i、I、o、O、a、A、r、R」等任意按键后才会进入编辑模式,通常会在左下方出现 INSERT 或 REPLACE 的字样,可以通过 esc 按键退出编辑模式,回到一般指令模式

  • 指令列命令模式(commadn-line mode)

    在一般模式中,输入「:、/、?」任意字符,则光标会移动到最底下的一列。

    在这个模式中,可以提供你搜索、读取、存盘、大量取代字符、离开 vi、显示行号等功能、

bash解释器

管理整个计算机硬件的其实是操作系统的核心(kernel),一般使用者只能通过 shell 来与核心沟通。bash具体都有哪些功能?那么有系统有多少 shell 可用呢?以及为什么要使用 bash?

bash 的功能主要有
  • 命令编修能力
  • 命令与文件补全功能
  • 命令别名设置功能
  • 工作控制、前景背景控制
  • 程序化脚本
  • 通配符
什么是shell

操作系统其实是一组软件,控制整个硬件与管理系统的活动检测,如果这组软件能被用户随意的操作,若使用者应用不当,将会使得整个系统崩溃!所以不能随便被一些没有管理能力的终端用户随意使用

但是可以考虑使用程序来指挥核心,可以发现应用程序其实是在最外层,就如同鸡蛋的外壳一样,因此也就被称呼为壳程序(Shell)

其实壳程序的功能只是提供用户操作系统的一个接口,因此整个壳程序需要可以呼叫其他软件的功能,如前面提到过的很多指令,包括 man、chmod、chown、vi、fdisk、mkfs 等指令,这些指令都是独立的应用程序,但是可以通过壳程序(指令行模式)来操作这些应用程序

为什么要学习shell呢
  • 文字接口的 shell 在各大 distribution 都一样
  • 远程管理时,文字接口速度较快
  • shell 是管理 linux 系统非常重要的一环,因为 linux 内很多控制都是以 shell 撰写的
shell运行的过程

在这里插入图片描述

shell解释的过程

在这里插入图片描述

设置别名

alis命令可以帮助我们给命令设置别名,方便我们更好的使用命令

可以通过alis来查看目前机器设置的别名

[root@localhost demo1]# alias
alias c='clear'
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

也可以自己设置别名 和取消别名

# 这里使用 lm 取代了 ls -al
alias lm='ls -al'
#或者可以使用c代替clear
alias c=clear

#取消别名
[root@localhost demo1]# unalias c
[root@localhost demo1]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
通配符

可以进行模糊匹配,比如可以想要知道 /usr/bin 下有多少以 X 开头的文件,使用ls -l /usr/bin/X* 就可以知道

*匹配任意字符

?匹配1个字符

举例

[root@localhost demo1]# ll /usr/bin/mkdir*
-rwxr-xr-x. 1 root root 79768 8月  20 2019 /usr/bin/mkdir

[root@localhost demo1]# ll /usr/bin/mkdi?
-rwxr-xr-x. 1 root root 79768 8月  20 2019 /usr/bin/mkdir
shell变量

什么是变量?

简单说,某一个特定字符串代表不固定的内容;比如:y = ax+b 等号左边的是变量,右边的是变量的内容,使用简单的变量来取代另一个比较复杂或则是容易变动的数据,这样做的好处就是方便!

特殊符号

学习变量知识,我们首先要认识Linux中的特殊符号,特殊符号经常与变量等结合使用

$符号

  • $?上一个命令的退出状态(若为0:表示成功;不是0,表示失败),或者上一个函数的返回值,但是有两个注意点:函数一结束就取返回值;退出状态码必须是-0~255,否则就使用命令替换获取返回值或者定义一个变量(shell的文件级和函数中定义的变量默认都是全局变量)
  • $#表示脚本中参数的个数
  • $*表示获取所有对应参数的值
  • $n表示为(n>=1)的参数
  • $0表示脚本名
  • $@表示获取所有对应参数的值
  • $$ 表示Shell本身的PID(ProcessID)

分号

在脚本中,分号是多个语句之间的分隔符号,当只有一个语句的时候,末尾无需分号,最后一个语句后面也无需分号,否则报错
在交互式命令中,用分号隔开每个命令, 每个命令按照从左到右的顺序,顺序执行, 彼此之间不关心是否失败, 所有命令都会执行,例如:command1 ; command2

实际应用

#这是脚本

#/bin/bash

echo 这是脚本名字:$0
echo 总共有$#个人,分别是$*
echo 第一个人是$1,第二个人是$2
#脚本运行结果
[root@localhost demo1]# bash test1.sh 张三 李四
这是脚本名字:test1.sh
总共有2个人,分别是张三 李四
第一个人是张三,第二个人是李四

引号

单引号 是原始字符串,属于强引用,它会忽略所有被引起来的字符的特殊处理,被引用起来的字符会被原封不动的使用,唯一需要注意的点是不允许引用自身

双引号 可以对特殊字符进行扩展, 属于弱引用,它会对一些被引起来的字符进行特殊处理。双引号与单引号的区别在于其可以包含特殊字符(单引号直接输出内部字符串,不解析特殊字符;双引号内则会解析特殊字符),包括’, ", $, ,如果要忽略特殊字符,就可以利用\来转义,忽略特殊字符,作为普通字符输出

具体效果可以看下面变量的取用章节

变量的应用
  • echo可以取出变量的值,通常有以下两种方式,推荐使用第2种方式
echo $PATH
echo ${PATH}			# 推荐使用这种方式取用

或者配合符号取用,比如使用单引号和双引号与echo配合就会有不同的结果

[root@localhost demo1]# a=10
#单引号
[root@localhost demo1]# echo '这是一个变量$a'
这是一个变量$a
#双引号
[root@localhost demo1]# echo "这是一个变量$a"
这是一个变量10
#不加引号
[root@localhost demo1]# echo 这是一个变量$a
这是一个变量10
#加大括号
[root@localhost demo1]# echo 这是一个变量${a}
这是一个变量10

通过以上结果我们可以发现,当echo配合单引号使用的时候,就是是什么就输出什么,不会取出其中变量的值,而使用双引号的时候则会取出变量的值

命令替换

另外还可以通过以下两种方式从命令中提取信息将其赋值给变量。

  • 反引号字符(`)
  • $()格式

$( ) 和反引号```(tab按键上面) 作用相同:命令替换

[root@localhost demo1]# echo $(date)
2023年 02月 25日 星期六 22:06:43 CST
[root@localhost demo1]# echo `date`
2023年 02月 25日 星期六 22:06:49 CST

数值运算

  • $(( )) 是整数数值运算,也可用(( )) 代替
  • $[ ]也是进行数学运算的,在将一个数学运算结果赋给某个变量时,可以用美元符和方括号($[ operation ])将数学表达式围起来
[root@localhost demo1]# echo $((1+2))
3
[root@localhost demo1]# echo $[1+2]
3

重定向

> 或 1>把正确的进行输出(标准输出),覆盖
>> 或 1>>把正确的进行输出(标准输出),追加
2>把错误的进行输出,覆盖
2>>把错误的进行输出,追加
&>合并正确和错误输出,覆盖重定向
&>>合并正确和错误输出,追加重定向

实际应用

#把正确的进行输出
[root@localhost demo1]# echo 12345 >test.txt
[root@localhost demo1]# cat test.txt
12345
[root@localhost demo1]# echo changsha >test.txt
[root@localhost demo1]# cat test.txt
changsha
[root@localhost demo1]# echo 12345 >>test.txt
[root@localhost demo1]# cat test.txt
changsha
12345
#把错误的进行输出

[root@localhost lianxi]# echo 123 2>test.txt
123
[root@localhost lianxi]# cat test.txt 
[root@localhost lianxi]# awdad 2>test.txt 
[root@localhost lianxi]# cat test.txt 
-bash: awdad: 未找到命令
[root@localhost lianxi]#  sdawaf >test.txt 
-bash: sdawaf: 未找到命令
#不论对错都进行输出
[root@localhost demo1]# echo 1234 &>>test.txt
[root@localhost demo1]# dasd &>>test.txt
[root@localhost demo1]# cat test.txt
0
1234
-bash: dasd: 未找到命令

/dev/null 垃圾桶黑洞装置的特殊写法

就是可以将任何信息吃掉的黑洞装置

[root@localhost demo1]# sadas 2>>/dev/null
[root@localhost demo1]# echo 12324 >/dev/null

#不论对错 都不会输出信息  常用来去除不必要的输出
 

逻辑操作符

  • &&:前一个执行正确,后面才会执行
  • ||:前一个执行正确,后面的不会执行

此处就不做赘述了

历史命令:history

history 用来查询曾经下达过的指令

history [n]
history [-c]
history [-raw] histfiles

正常情况下历史命令的读取记录是这样的:

  • 当以 bash 登录 Linux 主机后,系统会主动的由家目录的 ~/.bash_history 读取
  • 假设这次登录后,共下达过 100 次命令,等你注销时,系统就会将 101~1100 总共 1000 条记录更新~/.bash_history 中,因为和能存储最大条数 HISTSIZE 有关系,前面的序号会增加,但是总存储条数只有 HISTSIZE 条
  • 也可以使用 history -w 强制写入

选项与参数:

  • n:数字,列出最近 n 条命令
  • c:将目前的 shell 中的所有 history 内容全部消除
  • !:
    • !number 执行第几条历史命令
    • !command 执行最近一条的命令
[mrcode@study ~]$ history 4
  681  man rm
  682  alias
  683  man history
  684  history 4
[mrcode@study ~]$  !681		  # 执行第 681 条指令
 man rm			# 这里会显示具体执行的指令是什么
[mrcode@study ~]$ !!				# 执行上一个指令
 man rm
[mrcode@study ~]$ !al				# 从最新的历史指令开始搜索 al 开头的指令并执行他
alias
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值