Linux的bash脚本

发布时间 2023-12-12 17:49:23作者: ganwong99

Shebang

在计算领域中,Shebang(也称为 Hashbang )是一个由井号和叹号构成的字符序列 #! ,其出现在文本文件的第一行的前两个字符。
在文件中存在 Shebang 的情况下,类 Unix 操作系统的程序加载器会分析 Shebang 后的内容,将这些内容作为解释器指令,并调用该指令,并将载有 Shebang 的文件路径作为该解释器的参数。

#!/bin/bash
echo "Hello world!"
#!/usr/bin/env python
# -*- coding: utf-8 -*-
for i in range(10):
        print("Hello World!")

注意:

  1. 如果#!指定的解释器没有可执行的权限,会报错:"bad interpreter: Permission denied"。
  2. 如果#!指定的解释器不是一个可执行文件,那么指定的解释器会被忽略,转而给当前的shell执行此脚本。
  3. 如果#!指定的解释器不存在,会报错:"bad interpreter:No such file or directory"。
  4. 其中#!指定的解释器需要写其绝对路径。
  5. 如果使用的"bash test.sh"命令来执行脚本,那么shebang会被忽略,使用显式指定的bash。

注释

在shell脚本中,#后面的内容会被注释掉,系统会忽略。
尽量保持写注释的习惯,方便以后回顾(不然可能自己都看不懂)。

#!/bin/bash
# Date :2023-12-12 16:45
# Author: wg
# Blog:www.cnblogs.com/ganwong

echo "Hello world!"

执行shell脚本的方式

  1. bash script.sh或者sh script.sh ,这种方式,即使文件本身没有可执行权限。在脚本未指定shebang时也推荐使用这种方式。
[test@localhost ~]$ bash hello.sh
Hello world!
[test@localhost ~]$ sh hello.sh
Hello world!
  1. 使用绝对或相对路径执行脚本,需要文件具有可执行权限。
  2. source script.sh或者. script.sh ,代表执行通常使用后者。

几种方式的区别可以查看shell执行脚本各方式的区别

命令历史

参考:history命令
shell会保留其会话中用户提交执行的命令。
Linux 命令的历史记录,会持久化存储,默认位置是当前用户家目录的 .bash_history 文件。
当 Linux 系统启动一个 Shell 时,Shell 会从 .bash_history 文件中,读取历史记录,存储在相应内存的缓冲区中。
我们平时所操作的 Linux 命令,都会记录在缓冲区中。包括 history 命令所执行的历史命令管理,都是在操作缓冲区,而不是直接操作 .bash_history 文件。
当我们退出 Shell,比如按下 Ctrl+D 时,Shell 进程会把历史记录缓冲区的内容,写回到 .bash_history 文件中去。
基础用法:

1. 直接输入 history 命令,可以看到最近操作的所有命令都显示出来了
$ history
   1  bash
   2  ls
   3  vim .bash_history
   4  cat .bash_history
   5  history
   6  bash

2. 有时候我不需要显示所有的历史命令,只显示最后的 10 条历史记录,可以在命令后加数字 N 即可
$ history 10

3. 正常情况下,只有在 Shell 正常退出时,才会将缓冲区内容保存到文件。如果你想主动保存缓冲区的历史记录,执行 -w 选项即可
$ history -w

4. 如果你执行了一些敏感的命令操作,可以执行 -c 将缓冲区内容直接删除
$ history -c

重复执行命令(调用历史命令)

1.如果要重复执行一些命令,可以使用 ! 来快速执行重复的命令。重复执行第 1024 历史命令,可以执行如下命令
$ !1024
1024 这个编号可以通过 history 查看.

2.重复执行上一条命令
$ !!

3.重复执行倒数第 6 条历史命令,可以通过负数表示,-6 表示倒数第 6 条记录
$ !-6

4.刚才执行了一个很长命令,只记录命令开头是 curl,这时就可以通过 !curl 快速执行该命令可以通过 !curl 快速执行该命令
$ !curl

调用上一次命令的最后一个参数:

  1. 同时按住esc+.
  2. !$
[wg@localhost wg_test]$ cat !$
cat ./gushi.txt
静夜思
床前明月光