首页 > 系统相关 >Linux的bash脚本

Linux的bash脚本

时间:2023-12-12 17:58:55浏览次数:35  
标签:脚本 解释器 命令 sh Linux 执行 bash history

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
静夜思
床前明月光

标签:脚本,解释器,命令,sh,Linux,执行,bash,history
From: https://www.cnblogs.com/ganwong/p/17897459.html

相关文章

  • Linux文件复制命令SCP
    scp命令:scp可以实现远程主机之间的文件复制,scp使用ssh协议,所以双方必须开启ssh后方能使用常用选项:-r:复制目录时使用-P:大写的P指定端口,远程主机未改端口号可省略,[email protected]:/tmp/111.jpg/Users/rkhd/Downloads/zhang *SCP获取远程主机上的文......
  • 可视化监控云平台/智能监控EasyCVR如何使用脚本创建ramdisk挂载并在ramdisk中临时运行
    视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。安防管理视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、......
  • Linux安装cuda环境
    安装cuda驱动时需要先卸载开源的cuda驱动参看是否安装了开源驱动nouveaulsmod|grepnouveau关闭cat<<EOF|sudotee/etc/modprobe.d/blacklist-nouveau.confblacklistnouveauoptionsnouveaumodeset=0EOF重新生成内核initramfssudoupdate-initramfs-u重启......
  • 可视化监控云平台/智能监控EasyCVR如何使用脚本创建ramdisk挂载并在ramdisk中临时运行
    视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。安防管理视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、......
  • Python办公自动化在Mac和Linux平台上的兼容性限制
    Python是一种强大的编程语言,被广泛应用于办公自动化领域。然而,有关Python办公自动化在Mac和Linux平台上的兼容性问题需要进行一定的探讨。本文将对Python办公自动化在Mac和Linux平台上的兼容性限制进行分析,并提供一些解决方案。Python是一种流行的编程语言,在办公自动化领域有着广泛......
  • Linux系统安装docker源失败
    错误描述yum添加完docker源的地址,执行yummakecache后返回如下的问题yummakecachefailure:repodata/repomd.xmlfromdocker-ce-stable:[Errno256]Nomoremirrorstotry. https://download.docker.com/linux/centos/$releasever/x86_64/stable/repodata/repomd.xml:[Err......
  • 筑基-Windows&Linux常用命令
    1.针对文件管理和字符处理cdL切换目录~当前用户家目录~username特定用户的家目录-工作区切换前的上一个目录.当前目录..上一级目录cdW切换目录.当前目录..上一级目录不加参数显示当前所在目录路径pwdL显示当前工作目录lsL显示目录内容-a显......
  • CS-Script.Core C#通过读取文本实现动态脚本
    安装包 CS-Script.Core 编写脚本  工艺文件1.txtusingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingConsoleApp2;//注意不能有命名空间publicclass工艺文件1:IStep{......
  • Rocky Linux 9 安装 Podman
    1、安装Podmandnf-yinstallpodman2、配置镜像加速和私有镜像仓库#vim/etc/containers/registries.confunqualified-search-registries=["docker.io"][[registry]]prefix="docker.io"insecure=falseblocked=falselocation="docker.io"......
  • gdb本地调试版本移植至ARM-Linux系统
    移植ncurses库本文使用的ncurses版本为ncurses-5.9.tar.gz下载地址:https://ftp.gnu.org/gnu/ncurses/ncurses-5.9.tar.gz 1.       将ncurses压缩包拷贝至Linux主机或使用wget命令下载并解压 tar-zxvf ncurses-5.9.tar.gz 2.       解压后进入到ncurses-5.9目录......