shell脚本实例

CentOS7.5源码shell脚本自动安装MySQL5.7.28多实例

跟風遠走 提交于 2020-01-09 23:50:11
在文章上一篇文章中https://blog.51cto.com/8355320/2463218 我使用的是手动源码安装mysql5.7.28,安装过程还是比较耗时,我编写了shell自动安装脚本,请大家参考,脚本我测试没有出现问题,脚本我有二次修改里面的实例名与变量名,可能存在不一致,请自行对比确认下。脚本中有什么可以优化的还请多多指点,谢谢!!以下是脚本中的几点说明: 1、mysql5.7.28软件包(脚本中配置wget下载,如果下载比较慢,可以事先下载好,上传到 /opt 路径下,并注释对应行的wget下载代码,另外源码安装过程比较耗时,安装请耐心等待),软件包名称如下: #boost_1_59_0.tar.gz #mysql-boost-5.7.28.tar.gz 2、两个mysql数据库脚本上传路径: /opt 包含如下文件(注意sql脚本中的实例名),sql测试脚本名称如下: #testone.sql #testtwo.sql 实例dbtwo有添加lower_case_table_names = 1参数 实例dbone没有添加 4、根据服务器磁盘分配情况,创建对应软链接,脚本我配置的路径是/data,根据需要修改,例如: #mkdir /home/{data,deploy} #ln -s /home/data/ /data 5、修改(确保局域网内值唯一)

shell脚本之grep的使用方法

柔情痞子 提交于 2020-01-08 22:25:35
  笔者最近在使用shell脚本中处理字符串,因此使用了大量shell脚本中的四剑客(awk,grep,sed,cut)而其中使用最多的两种方法就是grep和awk,因此想总结整理一下。   一、grep的意义   二、grep的基本用法   三、awk的意义   四、awk的基本用法   五、实例说明两者怎么用   一、grep的意义     首先,grep是用来处理行数据的基本命令集,简单来说它的使用意义就在于当你想要找到 某个文件中的某个字符串以及它相关联的信息时(比如说行数),那么你就需要这个命令了。    二、grep的基本用法      grep使用的格式为 grep [参数] "模式" 文件    (1)grep的作用域      grep的作用域主要是由最后一个参数文件所决定的,换句话说,如果决定在某个文件中查找字符串,那么直接在后面书写某个文件即可,而如果在某个文件夹,那么要做两件事:1、首先需要在参数中加 -r(表示递归的意思)。2、在文件参数上加上文件夹。     例如:假设一个文件夹git_reverse目录中包含一个文件,文件夹中含有文件1.txt,而1.txt中包含字符串66666666,如果现在要搜索字符串6666666666,那么有以下两种方法:      1、grep NULL "66666666666" (单引号,双引号,不加引号) 1.txt

Openstack多VIP与实例绑定脚本

半城伤御伤魂 提交于 2020-01-08 14:38:50
一:因业务需要在openstack上的两个虚拟机关联两个VIP,而且数量比较大,因此使用如下脚本配置: 1.1:版本1: 手动执行并绑定2个VIP: # cat /home/www/vip.py #!/bin/env python #coding:utf-8 #Author: ZhangJie import sys import subprocess def admin_env(): #导入admin用户环境变量 obj = subprocess.Popen(("source /root/script/admin-ocata.sh"),shell=True,stdout=subprocess.PIPE) data = obj.stdout.read() print data def ip_data(): VIP1=sys.argv[1] VIP2=sys.argv[2] VM1_IP=sys.argv[3] VM2_IP=sys.argv[4] #查询并保存第一台实例的ID,用于后面的VIP 关联 obj = subprocess.Popen(("openstack port list | grep -w %s | awk '{print $2}'" % (VM1_IP)),shell=True,stdout=subprocess.PIPE) VM1_ID = obj.stdout

shell中$*和$@ 两个都区别

蹲街弑〆低调 提交于 2020-01-08 11:39:49
$* 与 $@ 区别: 相同点:都是引用所有参数。 不同点:只有在 双引号 中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数) 例: #!/bin/bash for i in "$*" do echo $i done for i in "$@" do echo "aa$i" done 输出 1 2 3 4 aa1 aa2 aa3 aa4 例: #!/bin/bash for i in $* do echo $i done for i in $@ do echo "aa$i" done 输出 1 2 3 4 aa1 aa2 aa3 aa4 其他: 读取数组 读取数组元素值的一般格式是: ${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

shell变量详解

最后都变了- 提交于 2020-01-07 20:06:37
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> shell变量详解 1 shell变量基础 shell变量是一种很“弱”的变量,默认情况下,一个变量保存一个串,shell不关心这个串是什么含义。所以若要进行数学运算,必须使用一些命令例如let、declare、expr、双括号等。shell变量可分为两类:局部变量和环境变量。局部变量只在创建它们的shell中可用。而环境变量则可以在创建它们的shell及其派生出来的任意子进程中使用。有些变量是用户创建的,其他的则是专用shell变量。变量名必须以字母或下划线字符开头。其余的字符可以是字母、数字(0~9)或下划线字符。任何其他的字符都标志着变量名的终止。名字是大小写敏感的。给变量赋值时,等号周围不能有任何空白符。为了给变量赋空值,可以在等号后跟一个换行符。用set命令可以查看所有的变量,unset var命令可以清除变量var,var相当于没有定义过。readonly var可以把var变为只读变量,定义之后不能对var进行任何更改。对shell变量的引用方式很多,用这些方式可以方便的获取shell变量的值,变量值的长度,变量的一个字串,变量被部分替换后的值等等。shell变量常见引用方式如下: 2 环境变量 环境变量的定义方法如下: var=value export var

Shell脚本入门-2

半腔热情 提交于 2020-01-07 08:38:36
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> (一)定义变量时,变量名不加美元符号($,PHP语言中变量需要) ,如: your_name="runoob.com" 注意, 变量名和等号之间不能有空格 ,这可能和你熟悉的所有编程语言都不一样。同时, 变量名的命名须遵循如下规则: 命名只能使用英文字母,数字和下划线, 首个字符不能以数字开头 。 中间不能有空格 ,可以使用下划线(_)。 不能使用标点符号。 不能使用bash里的关键字 (可用help命令查看保留关键字)。 有效的 Shell 变量名示例如下: RUNOOB LD_LIBRARY_PATH _var var2 无效的变量命名: ?var=123 user*name=runoob 除了 显式地直接赋值,还可以用语句给变量赋值 ,如: 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

Shell脚本入门-5

一笑奈何 提交于 2020-01-07 07:49:17
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)。 与大部分编程语言类似,数组元素的下标由0开始。 Shell 数组用括号 来表示, 元素用"空格"符号分割开 ,语法格式如下: array_name=(value1 ... valuen) 实例 #!/bin/bash # author:ethan my_array=(A B "C" D) 我们也可以使用下标来定义数组: array_name[0]=value0 array_name[1]=value1 array_name[2]=value2 读取数组 读取数组元素值的一般格式是: ${array_name[index]} 实例 #!/bin/bash # author:ethan 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 第二个元素为:

计算机系统大作业

孤者浪人 提交于 2020-01-04 14:03:39
#计算机系统大作业 题 目 程序人生-Hello’s P2P 专 业 软件工程 学   号 1183710227 班   级 1837102 学 生 孙兴博 指 导 教 师 史先俊 计算机科学与技术学院 2019年12月 摘 要 摘要是论文内容的高度概括,应具有独立性和自含性,即不阅读论文的全文,就能获得必要的信息。摘要应包括本论文的目的、主要内容、方法、成果及其理论与实际意义。摘要中不宜使用公式、结构式、图表和非公知公用的符号与术语,不标注引用文献编号,同时避免将摘要写成目录式的内容介绍。 论文内容主要是在预处理,编译,汇编,链接,进程管理,存储管理,和io管理等方面,对hello例程进行全面的系统级解释。 文章首先对源文件hello.c文件变为hello可执行文件的中的过程,以及产生的中间文件,来描述关于预处理,编译,汇编和链接的内容。再利用hello可执行文件执行过程中进程切换,内存分配情况和输入输出情况对有关于进程管理,存储时地址的管理,地址的映射和转换,Linux下的io管理方法接口等进行描述。 本文通过hello.c例程,对程序从源代码到可执行文件,再到被载入内存执行的过程,使用计算机系统的相关知识概念,进行解释。 关键词:计算机系统、编译,汇编,链接,进程,内存,shell,信号,cache; (摘要0分,缺失-1分,根据内容精彩称都酌情加分0-1分) 目 录 第1章

shell实现随机数多种方法(data,random,uuid)

自闭症网瘾萝莉.ら 提交于 2020-01-03 09:24:54
在日常生活中,随机数实际上经常遇到,想丢骰子,抓阄,还有抽签。呵呵,非常简单就可以实现。那么在做程序设计,真的要通过自己程序设计出随机数那还真的 不简单了。现在很多都是操作系统内核会提供相应的api,这些原始参数是获取一些计算机运行原始信息,如内存,电压,物理信号等等,它的值在一个时间段可 以保证是唯一的了。好了,废话我就不说了。呵呵。 shell脚本程序我们有那些获得随机数方法呢? 一、通过时间获得随机数(date) 这个也是我们经常用到的,可以说时间是唯一的,也不会重复的,从这个里面获得同一时间的唯一值。适应所有程序里面了。 例子: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 [chengmo@centos5 shell]$ date +%s 1287764773 #获得时间戳,当前到:1970-01-01 00:00:00 相隔的秒数 #如果用它做随机数,相同一秒的数据是一样的。在做循环处理,多线程里面基本不能满足要求了。 [chengmo@centos5 shell]$ date +%N 738710457 #获得当前时间的纳秒数据,精确到亿分之一秒。 #这个相当精确了,就算在多cpu,大量循环里面,同一秒里面,也很难出现相同结果,不过不同时间里面还会有大量重复碰撞 [chengmo@centos5 shell]$ date +%s%N

linux shell 之在线文本编辑sed

百般思念 提交于 2020-01-01 13:36:36
sed命令 sed是一种文本编辑命令,读取文件数据到缓冲区,然后通过sed编辑文本,在输出到指定的文件,sed 是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,sed按行处理文本数据,不断重复,直到文件末尾。可同时处理多个文件; 先讲个实例,大家看到如下一堆字符串,这是有多个sed命令表达式组合成的命令,|表示多个表达式的组合,\表示换行,冒号中s表示替换,g表示全部替换;$0是第一个输入参数,是一个文件名称,第一行意思是读取文件中的数据,将IVMS_SERVICE=0全部替换成IVMS_SERVICE=1,这里只是字符替换;第二行是将变量$SVC_PROG全部替换掉IVMS_SERVICE_PROG,第四行是先替换,然后将缓冲区中的数据输入到变量$SVC_SYS_FILE标记的文件中; # create service bash sed -e "s%IVMS_SERVICE=0%IVMS_SERVICE=1%g" $0 | \ sed -e "s%IVMS_SERVICE_PROG%$SVC_PROG%g" | \ sed -e "s%IVMS_SERVICE_NAME%$SVC_NAME%g" | \ sed -e "s%IVMS_SERVICE_DIR%$SVC_DIR%g" > $SVC_SYS_FILE sed的选项、命令、替换标记 命令格式