Shell基础之Shell 脚本的执行、Bash 的基本功能

目录

Shell 脚本的执行

赋予执行权限,直接运行

通过 Bash 调用执行脚本

Bash 的基本功能

历史命令

历史命令的调用

命令与文件的补全

命令别名

Bash 常用快捷键

输入输出重定向

Bash 的标准输入输出

输出重定向

输入重定向

多命令顺序执行

管道符

行提取命令 grep

find 和 grep 的区别


Shell 脚本的执行

[root@localhost sh]# vi hello.sh
#!/bin/Bash
#The first program
echo -e "hello world! "
  • 注意:#!/bin/Bash,不能省略
  • 在 Linux 中脚本的执行主要有这样两种种方法:

赋予执行权限,直接运行

  • 这种方法是最常用的 Shell 脚本运行方法,也最为直接简单。就是赋予执行权限之后,直接运行。当然运行时可以使用绝对路径,也可以使用相对路径运行。命令如下:
[root@localhost sh]# chmod 755 hello.sh 
#赋予执行权限
[root@localhost sh]# /root/sh/hello.sh 
hello world!
#使用绝对路径运行
[root@localhost sh]# ./hello.sh
hello world!
#因为我们已经在/root/sh 目录当中,所以也可以使用相对路径运行

通过 Bash 调用执行脚本

  • 这种方法也非常简单,不需要赋权限,直接执行,命令如下:
[root@localhost sh]# bash hello.sh 
hello world!

Bash 的基本功能

历史命令

  • 历史命令的查看

[root@localhost ~]# history [选项] [历史命令保存文件]
  • 选项:
    • -c: 清空历史命令
    • -w: 把缓存中的历史命令写入历史命令保存文件。
      • 如果不手工指定历史命令保存文件,则放入默认历史命令保存文件~/.bash_history
[root@localhost ~]# vi /etc/profile
…省略部分输出…
HISTSIZE=1000
…省略部分输出…
  • 使用 history 命令查看的历史命令和~/.bash_history 文件中保存的历史命令是不同的。
    • 那是因为当前登录操作的命令并没有直接写入~/.bash_history 文件,而是保存在缓存当中的。需要等当前用户注销之后,缓存中的命令才会写入~/.bash_history 文件。
    • 如果我们需要把内存中的命令直接写入~/.bash_history 文件,而不等用户注销时再写入,就需要使用“-w”选项了。命令如下:
[root@localhost ~]# history -w
#把缓存中的历史命令直接写入~/.bash_history
  • 这时再去查询~/.bash_history 文件,历史命令就和 history 命令查询的一致了。
  • 如果需要清空历史命令,只需要执行:
[root@localhost ~]# history -c
#清空历史命令

历史命令的调用

  • 如果想要使用原先的历史命令有这样几种方法:
    • 使用上、下箭头调用以前的历史命令
    • 使用“!n”重复执行第 n 条历史命令
    • 使用“!!”重复执行上一条命令
    • 使用“!字串”重复执行最后一条以该字串开头的命令
    • 使用“!$”重复上一条命令的最后一个参数

命令与文件的补全

  • 使用TAB键进行补全

命令别名

  • 命令格式:
[root@localhost ~]# alias
#查询命令别名
[root@localhost ~]# alias 别名='原命令'
#设定命令别名
  • 案例
[root@localhost ~]# alias 
#查询系统中已经定义好的别名
alias cp='cp -i'
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'
[root@localhost ~]# alias vi='vim'
#定义 vim 命令的别名是 vi
  • 既然我们说别名的优先级比命令高,那么命令执行时具体的顺序是什么呢?命令执行时的顺序是这样的:
    • 第一顺位执行用绝对路径或相对路径执行的命令
    • 第二顺位执行别名
    • 第三顺位执行 Bash 的内部命令
    • 第四顺位执行按照$PATH 环境变量定义的目录查找顺序找到的第一个命令
  • 为了让这个别名永久生效,可以把别名写入环境变量配置文件“~/.bashrc”。命令如下:
[root@localhost ~]# vi /root/.bashrc

Bash 常用快捷键

快捷键作 用
ctrl+A把光标移动到命令行开头。如果我们输入的命令过长,想要把光标移动到命令行开头时使用。
ctrl+E把光标移动到命令行结尾。
ctrl+C强制终止当前的命令。
ctrl+L清屏,相当于 clear 命令。
ctrl+U删除或剪切光标之前的命令。我输入了一行很长的命令,不用使用退格键一个一个字符的删除,使用这个快捷键会更加方便
ctrl+K删除或剪切光标之后的内容。
ctrl+Y粘贴 ctrl+U 或 ctrl+K 剪切的内容。
ctrl+R在历史命令中搜索,按下 ctrl+R 之后,就会出现搜索界面,只要输入搜索内容,就会从历史命令中搜索。
ctrl+D退出当前终端。
ctrl+Z 暂停,并放入后台。这个快捷键牵扯工作管理的内容,我们系统管理章节详细介绍。
ctrl+S暂停屏幕输出。
ctrl+Q恢复屏幕输出。

输入输出重定向

Bash 的标准输入输出

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

输出重定向

类 型
符 号 作用
标准输出重定向
命令 > 文件
以覆盖的方式,把命令的正确输出输
出到指定的文件或设备当中。
标准输出重定向
命令 >> 文件以追加的方式,把命令的正确输出输出到指定的文件或设备当中。
标准错误输出重定向错误命令 2>文件以覆盖的方式,把命令的错误输出输出到指定的文件或设备当中。
标准错误输出重定向错误命令 2>>文件以追加的方式,把命令的错误输出输
出到指定的文件或设备当中。
正确输出和错误输出同时保存命令 > 文件 2>&1以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。
正确输出和错误输出同时保存命令 >> 文件 2>&1 以追加的方式,把正确输出和错误输出都保存到同一个文件当中。
正确输出和错误输出同时保存命令 &>文件以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。
正确输出和错误输出同时保存命令 &>>文件 以追加的方式,把正确输出和错误输出都保存到同一个文件当中。
正确输出和错误输出同时保存命令>>文件 1 2>>文件 2 把正确的输出追加到文件 1 中,把错误的输出追加到文件 2 中。

输入重定向

[root@localhost ~]# wc [选项] [文件名]
  • 选项:
    • -c 统计字节数
    • -w 统计单词数
    • -l 统计行数

多命令顺序执行

多命令执行符格式作 用
命令 1 ;命令 2多个命令顺序执行,命令之间没有任何逻辑联系
&&命令 1 && 命令 2当命令 1 正确执行($?=0),则命令 2 才会执行
当命令 1 执行不正确($? ≠ 0),则命令 2 不会执行
||命令 1 || 命令2当命令 1 执行不正确($? ≠ 0),则命令 2 才会执行
当命令 1 正确执行($?=0),则命令 2 不会执行
  • 案例1:

  • 案例2

  • 案例3

  • 案例4
    • 相当于if

管道符

行提取命令 grep

[root@localhost ~]# grep [选项] "搜索内容" 文件名
  • 选项:
    • -A 数字: 列出符合条件的行,并列出后续的 n 行
    • -B 数字: 列出符合条件的行,并列出前面的 n 行
    • -c: 统计找到的符合条件的字符串的次数
    • -i: 忽略大小写
    • -n: 输出行号
    • -v: 反向查找
    • --color=auto 搜索出的关键字用颜色显示
  • 案例
[root@localhost ~]# grep "/bin/bash" /etc/passwd
#查找用户信息文件/etc/passwd 中,有多少可以登录的用户
[root@localhost ~]# grep -A 3 "root" /etc/passwd
#查找包含有“root”的行,并列出后续的 3 行
[root@localhost ~]# grep -n "/bin/bash" /etc/passwd
#查找可以登录的用户,并显示行号
[root@localhost ~]# grep -v "/bin/bash" /etc/passwd 
#查找不含有“/bin/bash”的行,其实就是列出所有的伪用户

find 和 grep 的区别

  • find 命令是在系统当中搜索符合条件的文件名,如果需要模糊查询,使用通配符进行匹配,搜索时文件名是完全匹配。
[root@localhost ~]# touch abc
#建立文件 abc
[root@localhost ~]# touch abcd
#建立文件 abcd
[root@localhost ~]# find . -name "abc"
./abc
#搜索文件名是 abc 的文件,只会找到 abc 文件,而不会找到文件 abcd
#虽然 abcd 文件名中包含 abc,但是 find 是完全匹配,只能和要搜索的数据完全一样,才能找到
  • 注意
    • find 命令是可以通过-regex 选项识别正则表达式规则的,也就是说 find 命令可以按照正则表达式规则匹配,而正则表达式是模糊匹配。但是,find 命令和 grep 命令本身就不好理解,所以我们这里只按照通配符规则来进行 find 查询。
  • grep 命令是在文件当中搜索符合条件的字符串,如果需要模糊查询,使用正则表达式进行匹配,搜索时字符串是包含匹配
[root@localhost ~]# echo abc > test
#在 test 文件中写入 abc 数据
[root@localhost ~]# echo abcd >> test
#在 test 文件中再追加 abcd 数据
[root@localhost ~]# grep "abc" test 
abc
abcd
#grep 命令查找时,只要数据行中包含有 abc,就会都列出
#所以 abc 和 abcd 都可以查询到

【注】:参考尚硅谷沈超老师教程

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值