shell脚本实例

shell习题-27

被刻印的时光 ゝ 提交于 2019-11-29 08:07:05
题目要求 要求:两类机器一共300多台,写个脚本自动清理这两类机器里面的日志文件。在堡垒机批量发布,也要批量发布到crontab里面。 A类机器日志存放路径很统一,B类机器日志存放路径需要用 匹配(因为这个目录里除了日志外,还有其他文件,不能删除。匹配的时候可用 .log) A类:/opt/cloud/log/ 删除7天前的 B类: /opt/cloud/instances/ 删除15天前的 要求写在一个脚本里面。不用考虑堡垒机上的操作,只需要写出shell脚本。 参考答案 #!/bin/bash #这个脚本用来删除老日志 #作者:猿课-阿铭 www.apelearn.com #日期:2018-12-12 dir1=/opt/cloud/log/ dir2=/opt/cloud/instance/ if [ -d $dir1 ] then find $dir1 -type f -mtime +7 |xargs rm elif [ -d $dir2 ] then find $dir2 -name "*.log" -type f -mtime +15 |xargs rm fi 题目要求 贷款有两种还款的方式:等额本金法和等额本息法,简单说明一下等额本息法与等额本金法的主要区别: 等额本息法的特点是:每月的还款额相同,在月供中“本金与利息”的分配比例中,前半段时期所还的利息比例大

linux Shell(待学)

无人久伴 提交于 2019-11-29 05:04:24
2. Shell 2.1 简介 shell脚本执行方式Shell 是一个用 C 语言编写的程序,通过 Shell 用户可以访问操作系统内核服务。它类似于 DOS 下的 command 和后来的 cmd.exe。Shell 既是一种命令语言,又是一种程序设计语言。 Shell script 是一种为 shell 编写的脚本程序。Shell 编程一般指 shell脚本编程,不是指开发 shell 自身。 Shell 编程跟 java、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。 Linux 的 Shell 种类众多,一个系统可以存在多个 shell,可以通过 cat /etc/shells 命令查看系统中安装的 shell。 Bash 由于易用和免费,在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。 2.2快速入门 1 编写脚本 新建 /root/test/shell/01.sh 文件 #!/bin/bash​echo 'hello world' # !是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。 echo 命令用于向窗口输出文本。 2 解释器 java 需要 虚拟机解释器, 同理 shell脚本也需要 解析器 [root@node04 shells]# cat

shell 强大的awk

匆匆过客 提交于 2019-11-29 04:52:55
from here 小用法,使用awk来对文件随机抽取n行 awk 'BEGIN{srand()} {print rand()"\t"$0}' input_file | sort -nk 1 | head -n line_num | awk -F "\t" '{print $2}' 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。 awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。 awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。 使用方法 awk '{pattern + action}' {filenames} 尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action

Shell 传递参数

坚强是说给别人听的谎言 提交于 2019-11-29 04:45:09
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为: $n 。 n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 实例 以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名: #!/bin/bash # author:菜鸟教程 # 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"

【shell教程02】Shell 变量、shell字符串、shell数组、shell注释

血红的双手。 提交于 2019-11-29 04:44:29
一、Shell 变量 1、定义变量 定义变量时,变量名不加美元符号($,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 下目录的文件名循环出来。 2、使用变量 使用一个定义过的变量,只要在变量名前面加美元符号即可,如: your_name="qinjx" echo $your_name echo ${your_name} 变量名外面的花括号是可选的,加不加都行 ,加花括号是为了帮助解释器识别变量的边界 ,比如下面这种情况: for skill in Ada Coffe Action Java; do echo "I am

shell脚本基础知识梳理<三>:条件测试与比较、流程控制 if

家住魔仙堡 提交于 2019-11-29 03:18:57
一、条件测试与比较 1、test 测试表达式 常用 test -f file && echo true||echo false 2、[ 测试表达式 ] 特别常用 [ -f file ]&& echo true||echo false 3、[[ 测试表达式 ]] 二、流程控制 1、流控制语句 if 实例1 #!/bin/bash #获取uid=0(root)中的0; id= id | awk -F '[=(]' '{print $2}' echo "your user id is:$id" if [ $id -eq 0 ] then echo "root" else echo "not root" fi 实例2:判断登录的用户 #!/bin/bash #$#是添加到shell 参数个数 if [ $# -eq 1 ] #或 [[ $#==1 ]] 或 (($#==1)) then if who|grep $1 >/dev/null then echo $1 is active. else echo $1 is not active. fi else echo "Usage: $0 <username>" exit 1 fi ~ 执行后的结果 [root@localhost shell]# sh if-if.sh root root is active. [root@localhost

linux shell 基础语法A-2

允我心安 提交于 2019-11-29 02:27:43
A-1讲了一些基本的语法,A2部分继续上次的内容接着讲。 shell是一门编程语言,自然也有结构化的表示方法。常见的编程语言结构化就是判断和循环。shell中的判断分为3类:数值判断,字符判断,文件判断。 判断的几种形式 If command Then command Fi If command Then command Else command Fi If command Then command Elif command Then command Else command fi (1)数字判断 实例:简单的猜数字 (2)字符判断 实例:判断输入的选项 (3)文件判断 实例:创建log文件前检查目标路径是否存在 #!/bin/bash if [ ! -d /mnt/123testlog/2019-08-31 ] then mkdir -p /mnt/123testlog/2019-09-31 fi 还需要关注 If test xxxx的用法 对参数值得判断处理 复合条件判断 If [] && [] If [] || [] 双括号 --双圆括号(数学表达式高级功能) --双方括号(字符串高级功能) 多选择判断时使用if结构就比较繁琐了,采用case更佳 Case Case xxx in p1) cmd ;; p2) cmd ;; *) default cmd ;; Esac

shell脚本中echo显示内容带颜色

北慕城南 提交于 2019-11-29 01:55:26
shell算数运算 ((i=$j+$k)) 等价于 i=`expr $j + $k` ((i=$j-$k)) 等价于 i=`expr $j -$k` ((i=$j*$k)) 等价于 i=`expr $j \*$k` ((i=$j/$k)) 等价于 i=`expr $j /$k` Let expressions 执行一个或多个表达式。表达式中的变量前不必有$.如果表达式中包含了空格或其他特殊字符,则必须引起来。 例:let “I = I + 1” 或 let i=i+1 算术运算符指的是可以在程序中实现加、减、乘、除等数学运算的运算符。Shell中常用的数学运算符如下所示。 — +:对两个变量做加法。 — -:对两个变量做减法。 — *:对两个变量做乘法。 — /:对两个变量做除法。 — **:对两个变量做幂运算。 — %:取模运算,第一个变量除以第二个变量求余数。 — +=:加等于,在自身基础上加第二个变量。 — -=:减等于,在第一个变量的基础上减去第二个变量。 — *=:乘等于,在第一个变量的基础上乘以第二个变量。 — /=:除等于,在第一个变量的基础上除以第二个变量。 — %=:取模赋值,第一个变量对第二个变量取模运算,再赋值给第一个变量。 在使用这些运算符时,需要注意到运算顺序的问题。例如输入下面的命令,输出1+2的结果。 echo 1+2 Shell并没有输出结果3

shell脚本中的数学运算

半城伤御伤魂 提交于 2019-11-29 00:58:57
shell中的赋值和操作默认都是字符串处理,在此记下shell中进行数学运算的几个特殊方法。以后用到的时候能够来看,呵呵 1、错误方法举例 a) var=1+1 echo $var 输出的结果是1+1,悲剧,呵呵 b) var=1 var=$var+1 echo $var 输出结果是1+1。依旧悲剧,呵呵 2、正确方法 1)使用let var=1 let "var+=1" echo $var 输出结果为2。这次没有悲剧 注意: a)经我測试let差点儿支持全部的运算符,在网上看到一篇文章说“let不支持++、--和逗号、(、)”,但经我測试自加、自减、以及括号的优先级都得到了非常好的支持 b)方幂运算应使用“**” c)參数在表达式中直接訪问,不必加$ d)普通情况下算数表达式能够不加双引號,可是若表达式中有bash中的keyword则需加上 e)let后的表达式仅仅能进行整数运算 2)使用(()) var=1 ((var+=1)) echo $var 输出结果为2 注意: (())的用法与let全然同样 3)使用$[] var=1 var=$[$var+1] echo $var 输出结果位2 注意: a)$[]将中括号内的表达式作为数学运算先计算结果再输出 b)对$[]中的变量进行訪问时前面须要加$ c)$[]支持的运算符与let同样,但也仅仅支持整数运算 4)使用expr

linux shell 基础语法A-1

元气小坏坏 提交于 2019-11-28 22:59:47
从echo开始 echo可以看做print printf之类的东西。几乎所有的shell脚本都离不开echo。 echo有如下几个作用: (1)输出脚本执行流程的提示信息 (2)交互式脚本打印提示信息 (3)构建格式化的日志 (4)调试脚本时,可以用来打印出一些中间变量的值(当然也可以用bash +x调试执行脚本) 常用的option -n:不换行打印 -e:识别转移字符(如\t) 许多脚本的usage就是echo来实现的(cmd -h or cmd --help)。 变量 变量分类:一般在shell中分为环境变量,用户变量,位置变量等的特殊变量三大类。shell是一种弱类型语言(强类型语言c,变量定义后要强制变换才能使用另一种变量类型,而shell不关心,变量的类型依据使用环境自己变化)。 但我们还是可以把shell中使用变量分为几个场景: (1)字符串 root@ubuntu-jpk:~# echo "hello world" hello world (2)数值 root@ubuntu-jpk:~# a=1 root@ubuntu-jpk:~# b=2 root@ubuntu-jpk:~# c=$((a+b)) root@ubuntu-jpk:~# echo $c 3 (3)一维数组(列表) root@ubuntu-jpk:~# list=(China America