shell脚本实例

shell编程之正则表达式(三)awk工具

安稳与你 提交于 2019-12-13 16:07:58
awk 工具 在 Linux/UNIX 系统中,awk 是一个功能强大的编辑工具,逐行读取输入文本,并根据指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以在无交互的情况下实现相当复杂的文本操作,被广泛应用于 Shell 脚本,完成各种自动化配置任务。 awk 常见用法 通常情况下 awk 所使用的命令格式如下所示,其中,单引号加上大括号“{}”用于设置对数据进行的处理动作。awk 可以直接处理目标文件,也可以通过“-f”读取脚本对目标文件进行处理。 awk 选项 '模式或条件 {编辑指令}' 文件 1 文件 2 „ //过滤并输出文件符条件的内容awk -f 脚本文件 文件 1 文件 2 „ //从脚本中调用编辑指令,过滤并输出内容。前面提到 sed 命令常用于一整行的处理,而 awk 比较倾向于将一行分成多个“字段”然后再进行处理,且默认情况下字段的分隔符为空格或者 tab 键。awk 执行结果可以通过 print 的功能将字段数据打印显示。在使用 awk 命令的过程中,可以使用逻辑操作符“&&”,表示“与”, “||”表示“或”,“!”表示“非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别 表示加、减、乘、除、取余和乘方。 在 Linux 系统中/etc/passwd 是一个非常典型的格式化文件,各字段间使用“:”作为分隔符隔开,Linux

Shell--数组

谁说胖子不能爱 提交于 2019-12-11 04:44:45
Shell数组 数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)。 与大部分编程语言类似,数组元素的下标由0开始。 Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下: array_name = ( value1 .. . valuen ) 实例 #!/bin/bash my_array = ( A B "C" D ) 我们也可以使用下标来定义数组: array_name [ 0 ] = value0 array_name [ 1 ] = value1 array_name [ 2 ] = value2 读取数组 读取数组元素值的一般格式是: ${array_name[index]} 实例 #!/bin/bash my_array = ( A B "C" D ) echo "第一个元素为: ${my_array[0]} " echo "第二个元素为: ${my_array[1]} " echo "第三个元素为: ${my_array[2]} " echo "第四个元素为: ${my_array[3]} " 执行脚本,输出结果如下所示: $ chmod +x test.sh $ ./test.sh 第一个元素为: A 第二个元素为: B 第三个元素为: C 第四个元素为: D

shell中的break跳出循环、continue结束本次循环、exit退出脚本

孤街醉人 提交于 2019-12-10 16:24:23
break跳出循环 实例: #! /bin/bash for i in `seq 1 5` do echo $i if [ $i == 3 ] then break fi echo $i done echo aaaaaaaaa 输出执行结果: [root@test01 jiaoben]# sh -x break1.sh ++ seq 1 5 + for i in '`seq 1 5`' + echo 1 1 + '[' 1 == 3 ']' + echo 1 1 + for i in '`seq 1 5`' + echo 2 2 + '[' 2 == 3 ']' + echo 2 2 + for i in '`seq 1 5`' + echo 3 3 + '[' 3 == 3 ']' + break + echo aaaaaaa aaaaaaa 从输出结果可以看到,当判断条件成立后,break,循环到此结束,不会再给它赋值,跳出循环,但是没有退出脚本,break后面的脚本内容依然会执行。 continue结束本次循环 忽略continue之下的代码,直接进行下一次循环 #!/bin/bash for i in `seq 1 5` do echo $i if [ $i == 3 ] then continue fi echo $i:不等于3 done echo

Shell--流程控制

醉酒当歌 提交于 2019-12-10 14:22:57
Shell流程控制 和Java、PHP等语言不一样,sh的流程控制不可为空,如(以下为PHP流程控制写法): < ?php if ( isset ( $_GET [ "q" ] )) { search ( q ) ; } else { // 不做任何事情 } 在sh/bash里可不能这么写,如果else分支没有语句执行,就不要写这个else。 if else if if 语句语法格式: if condition then command1 command2 .. . commandN fi 写成一行(适用于终端命令提示符): if [ $( ps -ef | grep -c "ssh" ) -gt 1 ] ; then echo "true" ; fi 末尾的fi就是if倒过来拼写,后面还会遇到类似的。 if else if else 语法格式: if condition then command1 command2 .. . commandN else command fi == if else-if else== if else-if else 语法格式: if condition1 then command1 elif condition2 then command2 else commandN fi 以下实例判断两个变量是否相等: a = 10 b = 20 if [ $a

Shell--基本运算符

无人久伴 提交于 2019-12-10 08:31:55
Shell基本运算符 Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。 expr 是一款表达式计算工具,使用它能完成表达式的求值操作。 例如,两个数相加( 注意使用的是反引号 ` 而不是单引号 ' ): #!/bin/bash val = ` expr 2 + 2 ` echo "两数之和为 : $val " 执行脚本,输出结果如下所示: 两数之和为 : 4 两点注意: 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。 完整的表达式要被 包含,注意这个字符不是常用的单引号,在 Esc 键下边。 算数运算符 下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20: 运算符 说明 举例 + 加法 `expr $a + $b` 结果为 30。 - 减法 `expr $a - $b` 结果为 -10。 * 乘法 `expr $a * $b` 结果为 200。 / 除法 `expr $b / $a` 结果为 2。 % 取余 `expr $b % $a` 结果为 0。 = 赋值 a=$b 将把变量 b 的值赋给 a。 == 相等

linux shell中的EOF

十年热恋 提交于 2019-12-09 18:37:58
关键词:EOF 在平时的运维工作中,我们经常会碰到这样一个场景: 执行脚本的时候,需要往一个文件里自动输入N行内容。如果是少数的几行内容,还可以用echo追加方式,但如果是很多行,那么单纯用echo追加的方式就显得愚蠢之极了! 这个时候,就可以使用EOF结合cat命令进行行内容的追加了。 下面就对EOF的用法进行梳理: EOF是END Of File的缩写,表示自定义终止符.既然自定义,那么EOF就不是固定的,可以随意设置别名,在linux按ctrl-d就代表EOF. EOF一般会配合cat能够多行文本输出. 其用法如下: <<EOF //开始 .... EOF //结束 还可以自定义,比如自定义: <<BBB //开始 .... BBB //结束 通过cat配合重定向能够生成文件并追加操作,在它之前先熟悉几个特殊符号: < :输入重定向 > :输出重定向 >> :输出重定向,进行追加,不会覆盖之前内容 << :标准输入来自命令行的一对分隔号的中间内容. 先举一个简单的例子,例1: # cat << EOF 在出现输入提示符">",输入以下内容: > Hello > EOF 输入结束后,在终端显示以下内容: Hello 思考: 我们可以从cat命令的说明中知道,cat的操作对象是文件,但是例1中cat的操作对象不是文件,而是用户输入。 那么我们可以这样理解例1

shell 随笔

╄→尐↘猪︶ㄣ 提交于 2019-12-09 12:26:05
Shell 变量 定义变量时,变量名不加美元符号($,PHP语言中变量需要),如: your_name="runoob.com" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则: 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。 中间不能有空格,可以使用下划线(_)。 不能使用标点符号。 不能使用bash里的关键字(可用help命令查看保留关键字)。 有效的 Shell 变量名示例如下: RUNOOB LD_LIBRARY_PATH _var var2 无效的变量命名: ?var=123 user*name=runoob 除了显式地直接赋值,还可以用语句给变量赋值,如: for file in `ls /etc` 或 for file in $(ls /etc) 以上语句将 /etc 下目录的文件名循环出来。 使用变量 使用一个定义过的变量,只要在变量名前面加美元符号即可,如: your_name="qinjx" echo $your_name echo ${your_name} 变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况: for skill in Ada Coffe Action Java; do echo "I am good at ${skill

学习Shell脚本

可紊 提交于 2019-12-07 23:43:27
背景 狗头之所以开始接触并学习shell脚本呢,是因为最近工作中经常需要在跑模型前输入一些命令来设定一些配置或是参数,然后还要调用一些代码,那么在Linux中一条条输入起来就比较麻烦,而且可能会有输错、遗漏的情况,这个时候Shell脚本就可以帮忙解决这些问题。我们可以通过写一个Shell脚本来统一管理这些命令,然后执行这个Shell脚本达到一次性执行这些操作的目的。 本文也是持续更新哦! 什么是Shell脚本? 其实你可能早就见过Shell脚本,Shell脚本通常是一个以 .sh 为后缀的文件,类似我们之前学过的java,python,写一个shell脚本只需要有一个能编写代码的文本编辑器(比如Vim)和一个能解释执行的脚本解释器就可以了,然后用sh就能执行。 通过实例来学习 linux下可以用vim直接新建一个sh脚本 vim test.sh 实例1 #! /bin/bash # This is my first shell script echo "Hello World!" date 第一行的#!是固定格式,用来指定解释器。 第二行#开头,是注释 第三行相当于print 第四行相当于我们直接在linux中输入date来打印时间 然后,我们用sh来运行它 sh test.sh 实例2 我们试着来做几种不同的加法脚本 第一种: #! /bin/bash # input: x, y

Linux Shell常用技巧(一)

…衆ロ難τιáo~ 提交于 2019-12-07 17:10:06
一. 特殊文件 : /dev/null和/dev/tty Linux系统提供了两个对Shell编程非常有用的特殊文件,/dev/null和/dev/tty。其中/dev/null将会丢掉所有写入它的数据,换句换说,当程序将数据写入到此文件时,会认为它已经成功完成写入数据的操作,但实际上什么事都没有做。如果你需要的是命令的退出状态,而非它的输出,此功能会非常有用,见如下Shell代码: /> vi test_dev_null.sh #!/bin/bash if grep hello TestFile > /dev/null then echo "Found" else echo "NOT Found" fi 在vi中保存并退出后执行以下命令: /> chmod +x test_dev_null.sh #使该文件成为可执行文件 /> cat > TestFile hello my friend CTRL + D #退出命令行文件编辑状态 /> ./test_dev_null.sh Found #这里并没有输出grep命令的执行结果。 将以上Shell脚本做如下修改: /> vi test_dev_null.sh #!/bin/bash if grep hello TestFile then echo "Found" else echo "NOT Found" fi 在vi中保存退出后

Shell脚本入门-4

大城市里の小女人 提交于 2019-12-06 23:32:09
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为: $n 。 n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 实例 以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名: #!/bin/bash # author:ethan # url:www.runoob.com echo "Shell 传递参数实例!"; echo "执行的文件名:$0"; echo "第一个参数为:$1"; echo "第二个参数为:$2"; echo "第三个参数为:$3"; 为脚本设置可执行权限,并执行脚本,输出结果如下所示: $ chmod +x test.sh $ ./test.sh 1 2 3 Shell 传递参数实例! 执行的文件名:./test.sh 第一个参数为:1 第二个参数为:2 第三个参数为:3 另外,还有几个特殊字符用来处理参数: 参数处理 说明 $# 传递到脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数。 如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 $$ 脚本运行的当前进程ID号 $! 后台运行的最后一个进程的ID号 $@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。 如"$@"用「"」括起来的情况、以"$1" "$2" … "$n"