编写Bash脚本程序从记录文件中提取history命令的优化,再介绍linux bash语法和结构

这篇具有很好参考价值的文章主要介绍了编写Bash脚本程序从记录文件中提取history命令的优化,再介绍linux bash语法和结构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目        录

一、引言

二、脚本代码实现

三、bash语法和结构

(一)基本语法

1、脚本开始与结束

2、注释

3、变量

4、数据类型

5、控制结构

6、循环控制

7、函数

8、算术运算

9、算术操作符和逻辑操作符

(二)命令相关

1、命令执行

2、命令的执行顺序

3、命令的执行优先级

4、命令的返回值

5、命令替换

6、输入/输出重定向

7、信号处理

8、 命令的退出状态

9、 命令的参数

10、命令的返回值

(三)内置函数和变量

1、内置变量

2、内置函数:

(四)其他

1、文件测试操作符

2、参数扩展


一、引言

       前面写了一篇文章:History命令解释,及一个相关的bash脚本(如何编写脚本程序从记录文件中提取history命令),有伙伴试过了,想知道,输出的命令列表能否进行排序,方便查看?

       当然是可以的,本节就介绍一下如何实现。

二、脚本代码实现

       其他的不多说了,直接上代码:

#!/bin/bash  
  
# 检查输入参数  
if [ "$#" -ne 1 ]; then  
    echo "Usage: $0 <path.bash_history_file>"  
    echo “用法:$0  带路径的文件名”
    exit 1  
fi  
  
# 检查记录文件是否存在  
if [ ! -f "$1" ]; then  
    echo "Error: File $1 does not exist."  
    exit 1  
fi  
  
# 创建一个临时文件来存储格式化的历史记录  
tempfile=$(mktemp)  
  
# 读取.bash_history文件,将时间戳和linux 命令存储到临时文件中  
while IFS= read -r line; do  
    # 检查行是否以#开头,如果是,则认为是时间戳  
    if [[ $line =~ ^\#[0-9]+$ ]]; then  
        timestamp=${line:1}  
    else  
        # 将时间戳和命令写入临时文件  
        echo "$timestamp $line" >> "$tempfile"  
    fi  
done < "$1"  
  
# 按时间戳排序临时文件中的内容  
sort -n -k 1,1 "$tempfile" | cut -d ' ' -f 2- | cat -n | sed 's/^\s*//'  
  
# 最后删除临时文件  
rm -f "$tempfile"

        其他操作请参考前面的文章:History命令解释,及一个相关的bash脚本(如何编写脚本程序从记录文件中提取history命令)

三、bash语法和结构

        Bash(Bourne Again SHell)是Linux和其他类Unix系统中默认的shell,它提供了脚本编程语言的功能。下面详细介绍Bash脚本的基本语法和结构。

(一)基本语法

1、脚本开始与结束

        脚本通常以#!/bin/bash开头,这被称为shebang,它告诉系统使用bash来执行这个脚本。

        脚本结束没有特定的标记,但通常以一个非执行的空白行结束,这样可以使脚本结构更清晰。

2、注释

        在脚本中,#符号用于注释,它之后的所有内容直到行尾都会被视为注释。

3、变量

        变量名以字母或下划线开头,后面可以跟字母、数字或下划线。

        变量赋值不需要使用等号两边有空格,例如:name="John"。

        读取用户输入到变量中:read name。

4、数据类型

        字符串:由零个或多个字符组成的有序字符序列。

        整数:没有小数点的数字。

5、控制结构

        if...then...else...fi:用于基于条件执行不同的操作。如下:

if [ condition ]; then 

    # commands 

elif [ condition ]; then 

    # commands 

else 

    # commands         

fi`

        for...in...do...done:用于循环遍历一组值。

for variable in value1 value2 ...; do 

    # commands using $variable 

done

        while...do...done:只要给定的条件为真,就会重复执行一系列命令。

while [ condition ]; do 

    # commands 

done

6、循环控制

        break:跳出当前循环。

        continue:跳过当前循环的剩余部分,进入下一次循环。

7、函数

        通过名字调用一段代码的复用方式。定义函数时使用function_name() { ... }的格式。函数参数通过位置来传递。

8、算术运算

        使用expr或双括号(( ))进行算术运算。例如,expr 2 + 3 或 (( a = 2 + 3 ))。

9、算术操作符和逻辑操作符

        例如,+、-、*、/ 用于算术运算,==、!= 用于字符串比较,&&、|| 用于逻辑操作。

控制结构中的模式匹配:使用 [[ ... ]] 进行模式匹配,例如 [[ $variable == pattern ]]。

数组:Bash 支持数组,可以通过索引访问元素。

(二)命令相关

1、命令执行

        使用分号(;)或换行符来分隔命令。例如,echo "Hello"; echo "World" 或 `echo "Hello"

World"`。

2、命令的执行顺序

        Bash脚本会按照从上到下的顺序执行命令,你可以使用 && 和 || 控制命令的执行顺序。

3、命令的执行优先级

        使用括号可以改变命令的执行优先级。

4、命令的返回值

        每个命令执行后都会返回一个状态码,可以使用 $? 获取上一个命令的返回值。状态码0表示成功,非0表示有错误发生。

5、命令替换

        可以使用反引号()或$()来执行命令并将输出替换到当前位置。例如,echo "Today is $(date)"`。

6、输入/输出重定向

        使用尖括号(>)和(>>)来重定向标准输出和标准错误输出到文件。例如,echo "Hello" > file.txt。使用尖括号(<)来重定向标准输入从文件。例如,cat < file.txt。

7、信号处理

        可以使用 trap 命令捕获和处理信号。

8、 命令的退出状态

        每个命令执行后都会返回一个退出状态码,0通常表示成功,非0表示有错误发生。你可以使用特殊变量 `$?` 来获取上一个命令的退出状态码。

9、 命令的参数

        在脚本中,你可以通过特殊变量 `$0`、`$1`、`$2` 等来获取传递给脚本或函数的参数。例如,在函数中,你可以使用 `$1` 来获取第一个参数的值。另外,你也可以使用特殊变量 `$#` 来获取传递给脚本或函数的参数的数量。

10、命令的返回值

        命令执行后返回的状态码用于判断命令是否成功执行。0表示成功,非0表示有错误发生。可以通过特殊变量$?获取上一个命令的返回值。

(三)内置函数和变量

1、内置变量

        例如 $#、$*、$1、$2 等用于获取位置参数的信息;$? 用于获取上一个命令的返回值;`` 用于获取当前脚本的进程ID等。

2、内置函数:

        例如 echo、read、test 等,这些函数提供了基本的输入输出和测试功能。

(四)其他

1、文件测试操作符

用于检查文件或目录的存在、权限、类型等属性。例如,-e 检查文件或目录是否存在,-f 检查是否为常规文件,-d 检查是否为目录等。

if [ -e "/path/to/file" ]; then 

    echo "File exists" 

fi

2、参数扩展

例如 ${variable#pattern} 可以删除变量值的最前面与模式匹配的部分。

        

        以上是Bash脚本的基本语法和结构的概述,Bash脚本还有很多高级特性和用法,可以参考相关的文档和教程进行深入学习。希望这些信息,可以帮助您更好地了解Bash脚本的语法和结构!文章来源地址https://www.toymoban.com/news/detail-823126.html

到了这里,关于编写Bash脚本程序从记录文件中提取history命令的优化,再介绍linux bash语法和结构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • bash : 无法将“bash”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。(解决方案)

    bash : 无法将“bash”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然 后再试一次。 本来是想在Windows10系统下运行sh脚本文件,但是调用 bash 命令,在网上直接搜索错误原因,网上给出的解决方案是在powershell里面使

    2024年02月10日
    浏览(51)
  • Linux基础命令-history历史记录

    Linux基础命令-alias设置别名_Linux学习中的博客-CSDN博客 文章目录 前言 一、history命令介绍 二、语法及参数  三、参考实例 总结         在工作中,经常会需要多次重复某一个命令,或者需要查看之前执行过什么命令,那么都少不了history这个命令,下面一起来看看吧。    

    2023年04月22日
    浏览(47)
  • Linux命令历史记录管理:使用history命令提高工作效率

    在日常使用Linux系统时,我们经常需要执行各种命令来完成任务。有时候我们可能会忘记之前执行过的某个命令,或者想要重复执行某个曾经输入过的命令。这时,历史记录功能就变得非常有用了。 在Linux中,有一个非常有用的命令叫做history,它可以帮助我们查看和管理已执

    2024年02月07日
    浏览(88)
  • Docker笔记-搭建Python环境、安装依赖、打包镜像、导入镜像、编写bash脚本灵活调用

    适合无联网的机器及多Python的机器进行部署。 有网络及有docker的,拉取指定版本的python如: 安装好后进入容器: 使用pip安装各种依赖: 千万不要退出,另外启动一个shell,查下目前运行的容器: 制作成新的镜像: 导出新镜像: 找到没联网有docker的机器,导入新的镜像 在新

    2024年02月21日
    浏览(50)
  • linux基本功之历史记录history命令实战

    💓 想要学好Linux,命令是基本功,企业中常用的命令大约200多个,不管是写shell脚本还是管理操作系统,最常用的命令必须要牢牢掌握,像我们以前学乘法口诀一样,烂熟于心,唯有如此,才能打牢基础。 💓 只要地球不爆炸,我们永远不放假,只要宇宙不重启,我们永远不

    2024年02月08日
    浏览(61)
  • [网鼎杯 2018]Comment git泄露 / 恢复 二次注入 .DS_Store bash_history文件查看

    首先我们看到账号密码有提示了 我们bp爆破一下 我首先对数字爆破 因为全字符的话太多了 爆出来了哦 所以账号密码也出来了 没有什么用啊 扫一下吧 有git 那泄露看看 真有 原本的githack坏了 mirrors / BugScanTeam / GitHack · GitCode 重新下了一个 需要下载后 里面存在 .git文件夹 然后

    2024年02月06日
    浏览(33)
  • BASH shell脚本篇2——条件命令

    这篇文章介绍下BASH shell中的条件相关的命令,包括:if, case, while, until, for, break, continue。之前有介绍过shell的其它基本命令,请参考:BASH shell脚本篇1——基本命令 1. If语句 if 语句用于在顺序执行语句的流程中执行条件任务。 If 语句通常用于在Bash脚本中做出决定。它们根据

    2024年02月07日
    浏览(47)
  • Linux history 命令详解:如何查看、显示时间、清空、重复和控制历史记录

    在 Linux 中,如果你使用终端操作系统(sh、bash、zsh、fish等),那么有一个非常强大且方便的命令叫做 history 。它的作用是让你查看之前终端中输入的所有命令记录,以及可以方便地快速重复执行某个命令或修改一些参数后重新执行。下面我们来看一下Linux history常用命令:

    2024年02月04日
    浏览(108)
  • 记录:Unity脚本的编写

    在学习软件构造这门课的时候,对unity和c#进行了 一定程度的学习,包括简单的建立地形,添加对象,添加材质等,前不久刚好学习了如何通过c#脚本对模型进行操控,在此记录一下。 使用的语言是c#,使用的工具是visual studio 首先创建一个c#脚本文件 拖动文件到对应对象的状

    2024年02月05日
    浏览(43)
  • Linux shell编程学习笔记44:编写一个脚本,将md5sum命令执行结果保存到变量中,进而比较两个文件内容是否相同

    在  Linux shell编程学习笔记42:md5sum https://blog.csdn.net/Purpleendurer/article/details/137125672?spm=1001.2014.3001.5501 中,我们提到编写一个在Linux系统下比较两个文件内容是否相同的脚本。 基本思路是: 其中有两个难点: 1.文件的md5值的获取 2.md5值的比较 对于第1个难点,我们的解决办法是

    2024年04月10日
    浏览(75)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包