首页
学习
活动
专区
圈层
工具
发布

SHELL(bash)脚本编程一:变量

本篇开始,介绍shell脚本编程,更确切的说是bash脚本编程(版本:4.2.46(1)-release)。我们从变量开始。...登录shell的进程名为-bash,非登录shell(比如在桌面环境下通过打开一个"终端"窗口程序而获得的shell)的进程名为bash。...shell(interactive shell)是指shell与用户进行交互,shell需要等待用户的输入(键入一条命令后并按下回车键),用户需要等待命令的执行和输出。...非交互式shell启动时(如脚本中),会继承派生出此shell的父shell的环境变量并执行环境变量BASH_ENV的值中所指代的文件。...$_ 在shell初始启动时表示启动此shell命令的绝对路径或脚本名,随后,表示前一条命令的最后一个参数。 声明/定义及赋值 通常bash的变量是不需要提前声明的,可以直接进行赋值。

3.4K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    SHELL(bash)脚本编程八:技巧

    至此,我们介绍了linux系统中常用命令的使用方法,简述了bash程序的使用方法和工作流程。在使用bash编写脚本程序时,熟练掌握这些工具的用法,往往能够达到事半功倍的效果。...本文将通过讲述一些实例,试着探讨bash脚本编程的技巧。需要说明的是,这里的技巧是多角度寻求解决方案的思路,是建立在对各种命令和bash编程技法深刻理解的基础之上的。...1、笔试题 先来看某公司的两个笔试题: 1、写脚本实现,可以用shell、perl等。在目录/tmp下找到100个以abc开头的文件,然后把这些文件的第一行保存到文件new中。...2、写脚本实现,可以用shell、perl等。把文件b中有的,但是文件a中没有的所有行,保存为文件c,并统计c的行数。 问题没什么可分析的,直接的解决方案: #!...bash使用一个称为进程替换的功能来弥补这些不足,进程替换实际上是命令替换和管道的组合,和命令替换类似,bash运行一个命令,但令其运行于后台而不再等待其完成。

    1.1K20

    SHELL(bash)脚本编程六:执行流程

    4、别名 如果非重定向或赋值语句的第一个单词是一个普通单词,bash会根据别名记录判定该单词是不是一个命令别名,如果是,则使用对应的文本替换该别名(注意此文本可以是shell能够接受的任意字符)。...然后继续分割并判定替换后的文本,重复上述同样过程,如果替换后仍有别名(不同于前面曾扩展过的别名),则递归地展开并判定。 另外,默认时只有在交互式shell环境下才允许别名扩展。...命令执行 对于命令的执行,我们介绍更一般的情况(命令位于磁盘文件系统之上的情况): 1、bash执行fork()系统调用创建子进程(如果命令已经处于子shell内,则不会再次fork(),例如上述管道命令...,execve()失败,此时,bash会判断该文件,如果该文件有可执行权限并且不是一个目录,则认为该文件是一个脚本,于是调用默认解释器解释执行该文件的内容。...7、执行完毕后,bash收集命令的返回值。 这些,就是bash执行命令的整个流程。

    2.4K40

    SHELL(bash)脚本编程四:其他扩展

    本篇接着介绍shell中用到的其他扩展。 历史扩展 默认时,在交互式shell环境下,bash允许对历史命令进行记录和扩展。...默认时shell脚本中不能使用别名。别名扩展是完全基于文本的,因而别名可以改变shell语法。几乎任何别名的作用,都可以用shell函数来实现。 大括号扩展 大括号扩展是一种生成任意字符串的机制。...bash使用一个称为进程替换的功能来弥补这些不足,进程替换实际上是命令替换和管道的组合,和命令替换类似,bash运行一个命令,但令其运行于后台而不再等待其完成。...可以执行如下两个命令试对比命令替换和进程替换的区别: #sleep命令结束后才输出 echo $(ls;sleep 3) #输出先于sleep执行结束 cat <(ls;sleep 3) 脚本举例: #...sleep 300 内置命令fg可以使后台进程返回到前台继续运行: [root@centos7 ~]# fg %1 sleep 300 ^C [root@centos7 ~]# 在交互式shell或脚本中

    1.2K30

    shell脚本后台运行

    使用&符号在后台执行命令 你可以在Linux命令或者脚本后面增加&符号,从而使命令或脚本在后台执行,例如:. $ ./my-shell-script.sh & 2....使用nohup在后台执行命令 使用&符号在后台执行命令或脚本后,如果你退出登录,这个命令就会被自动终止掉。要避免这种情况,你可以使用nohup命令,如下所示: $ nohup ..../my-shell-script.sh & 3. 使用screen执行命令 通过nohup和&符号在后台执行命令后,即使你退出登录,这个命令也会一直执行。...使用at将一个命令作为批处理执行 使用at命令,你可以让一个命令在指定的日期和时间运行,例如要在明天上午10点在后台执行备份脚本,执行下面的命令: $ at -f backup.sh 10 am tomorrow

    5.2K50

    使用bash编写Linux shell脚本--复合命令

    从可读性来说,封装后的命令使用缩进格式将会使复合命令的代码清晰并便于阅读。...0 虽然 ls 报告了一个错误,管道返回的还是成功的状态码,因为 wc 命令是运行成功的。 Bash 也定义了一个数组称之为 PIPESTATUS ,它包含了上此运行管道中每一个命令的单独状态。...2>& fi 在 if 命令中嵌入复杂的命令会使脚本语言难读且难以调试。你应该避免这样做。在这个例子中,如果 rm 命令运行失败,则它先显示自己的提示信息,接着显示脚本中的信息。...在到达 break 命令后, Bash 会跳出循环并执行循环外的第一条命令。 break 后面可以跟着一个数字,表示跳出几层循环。例如: break 2 跳出 2 层循环。...report.bash :报表格式化 report.bash 是一个用来给销售数字建立报表的脚本程序。销售数字文件有产品名称、本国销售数、外国销售数来组成。

    3.3K101

    SHELL(bash)脚本编程七:源码简析

    本文对bash的源码(版本:4.2.46(1)-release)进行简要分析。 数据结构 bash是用C语言写成的,其源码中只使用了少量的数据结构:数组,树,单向链表,双向链表和哈希表。...解析 bash的入口函数main()位于文件shell.c中: int main (argc, argv, env) int argc; char **argv, **env; {...(last_command_exit_value); } 函数定义了shell启动和运行过程中的一些状态变量,依据不同的参数初始化shell:shell_initialize ()初始化了shell变量和参数...global_command <------------token------------word 执行 在函数reader_loop()中,调用完read_command()获得current_command后,...,如果文件不是目录且有可执行权限,则把它当做脚本执行execute_shell_script()。

    2.3K41

    bash运行脚本的几种方式 转

    bash shell 脚本执行的方法有多种,本文作一个总结,供大家学习参考。 假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限。...方法二:以绝对路径的方式去执行bash shell脚本: /data/shell/hello.sh 方法三:直接使用bash 或sh 来执行bash shell脚本: cd /data/shell bash...方法四:在当前的shell环境中执行bash shell脚本: cd /data/shell . hello.sh 或 cd /data/shell source hello.sh 前三种方法执行shell...脚本时都是在当前shell(称为父shell)开启一个子shell环境,此shell脚本就在这个子shell环境中执行。...shell脚本执行完后子shell环境随即关闭,然后又回到父shell中。而方法四则是在当前shell中执行的。 假设shell脚本文件为hello.sh 放在/root目录下。

    2.9K10

    如何用 10 行 bash shell 脚本监控 Linux?

    但是,当出于测试的目的来监控一定时间时,bash 脚本会派上用场。 在本教程中,我们将编写一个 bash shell 脚本,它将输出一个三列表,来显示我们机器上的内存、磁盘和 CPU 的百分比。.../"{printf "%s\t\t", $5}') CPU=$(top -bn1 | grep load | awk '{printf "%.2f%%\t\t\n", $(NF-2)}') 我们需要脚本运行一段时间...为了做到这一点,我们需要使用 while do 循环,每次循环后延迟 x 秒(取决于您的测试): end=$((SECONDS+3600)) while [ $SECONDS -lt $end ]; do...echo "$MEMORY$DISK$CPU" sleep 5 done 为了在一定时间内运行一次循环,我们可以定义一个变量 $end,它从 bash 脚本开始的时间开始计算当前的秒数,因此是 SECONDS...以下压力测试将运行 1 小时。

    4.1K20

    如何在Bash Shell脚本中使用`exec`命令?

    exec 是一个在Bash Shell脚本中使用的命令,它允许您替换当前进程的内容,包括进程ID和文件描述符。...本文将详细介绍如何在Bash Shell脚本中使用exec命令,并提供一些常见的用例和示例。...下面我们将介绍几个常见的使用 exec 命令的场景:替换当前 Shell 进程在Bash Shell脚本中,您可以使用 exec 命令替换当前的Shell进程。...这样做的效果是在脚本中执行完 exec 命令后,当前Shell进程将被替换为新的命令,原始脚本中的任何后续命令都将被忽略。以下是一个示例,展示如何在脚本中使用 exec 命令替换Shell进程:#!...通过合理使用 exec 命令,您可以在Shell脚本中实现更高级的功能和控制。本文介绍了在Bash Shell脚本中使用 exec 命令的基本语法和用法,并提供了几个常见的使用场景和示例。

    6.6K50

    基于Bash Shell的一个审计脚本

    如何编写自己的Web日志分析脚本? ? 运行结果如下: ? ? 三、日志搜索 日志搜索,其实就是个文件名搜索和ip地址搜索功能。...毕竟都2020年了,不会徒手写shell脚本的攻城狮不是好运维~ 写个整体代码的框架示例,可能看起来能更清楚些... #!...用户输入序号1,则进入到case的第一个逻辑上,输出echo “case 1”后,让它跳转到定义好的gn1函数上,并让gn1函数输出“我是功能1”后,返回到menu函数,也就是主界面。 ? ?...五、题外话 在kali中,可以将常用的工具集中起来,配合bash shell的function函数,来实现自动化执行,就不需要背命令了,无论什么工具,输个IP地址或者域名就可以直接使用了,只要你提前在function...利用nmap -script=smb-vuln-ms17-010,扫描到目标主机存在MS17-010漏洞后,自动执行攻击命令,获取shell权限。 ?

    1.6K30

    4、shell脚本后台运行知识

    用途和方法 在实际工作中,一般会通过ssh连接服务器,隐藏可能就会有脚本或命令在执行期间不能中断的需求,若中断,则不仅前功尽弃,还可能破坏系统数据,下面是防止脚本执行终端的3种方法: 1)使用sh /server.../scripts/while_01.sh & 命令,即使用&在后台运行脚本 2)使用nohup /server/scripts/while_01.sh & 命令,即使用nohup加&在后台运行脚本 3)...使用screen保持会话,然后在执行命令或脚本,即使用screen保持当前会话状态 2.脚本前台后台运行命令 命令 命令说明 a.sh & 将a.sh放到后台执行,常用 ctrl+c 停止当前前台脚本或任务...ctrl+z 暂停当前前台脚本或任务 bg (background)把当前前台脚本或任务放到后台运行 fg (frontground)把后台脚本或任务放到前台执行,用fg加任务编号调出指定任务,如fg...2 jobs 查看当前执行的脚本或任务 kill 关闭执行的脚本任务,kill %1 3.

    3.2K20

    使用bash编写Linux shell脚本--调试和版本控制

    外壳调试的特点 Bash 有几个开关和选项对于跟踪调试脚本是非常有用的。“ -n ”开关可以使你不用运行脚本就可以检查脚本语法的正确性。通常在开发期间使用这个开关来检查脚本的语法。...$Locker$— 锁定这个文件的用户登录名。 ( 如果没有锁定为空,除非使用 cvs admin –l 否则通常都是空的 ) 。 $Log$— 提交时提供的的日志消息,通常先于头部信息。...CVS 标识出在什么地方有冲突,你必须自己编辑脚本以解决这些冲突。 如果在更新后没有其他问题,你可以继续编辑你的源代码。...使用 time 命令统计执行的时间 有两个命令可以对一个程序或脚本进行运行时间的统计。 Bash 内置命令 time 可以告诉你,一个程序运行花了多长时间。...文件归档 shell archive (或 shar )是一个文本文件的集合或将多个脚本压缩为一个单独的文件。在脚本中的数据在这儿表示为文件。

    3.7K111
    领券