shell函数

Shell 脚本之编程和变量(外加实战项目)

匿名 (未验证) 提交于 2019-12-03 00:11:01
本章目的:学会编程规范,变量的相关脚本操作和知识 一.Shell 脚本的概述 二.Shell的作用 三.写第一个Shell脚本 1.写一个脚本(到BOOT目录,查看当前位置,以长格式友好显示VML开头的所有文件) [ root@localhost ~]# vim aaa . sh "随意编一个空文件以.sh为结尾" / bin / bash "开头声明,固定格式” 一个脚本 " 描述性信息可加可不加 " cd /boot/ pwd ls -lh vml* ~ ~ 2.给我们的脚本加上执行权限,看一下结果 [ root@localhost ~]# chmod + x aaa . sh [ root@localhost ~]# ./ aaa . sh //执行脚本,这是我们最常用的方式 / boot - rwxr - xr - x . 1 root root 5.7M 8 月 10 00 : 26 vmlinuz - 0 - rescue - cc65aecf945d4dde800fe3e29ee6edbc - rwxr - xr - x . 1 root root 5.7M 8 月 23 2017 vmlinuz - 3.10 . 0 - 693.el7.x86 _64 3.重定向符号" > " 管道符号" | " " > " :把左侧的命令结果重定向另一个文件或目录 [ root

Shell 脚本中 '$' 符号的多种用法

匿名 (未验证) 提交于 2019-12-03 00:09:02
通常情况下,在工作中用的最多的有如下几项: $0:Shell 的命令本身 $? :显示最后命令的执行情况 $#:传递到脚本的参数个数 ...... 今天将通过以上几种选项并做进一步的操作案例; 1、引用变量 引用变量时,使用 $ 符号直接来进行引用,以及包括循环变量; [root@localhost ~]# x=1024 [root@localhost ~]# echo $x 1024 利用双引号 " 将括起来的字符串支持变量插值。 [root@localhost ~]# x=1024 [root@localhost ~]# echo "x = $x" x = 1024 [root@localhost ~]# x=1024 [root@localhost ~]# echo "x = ${x}xy" x = 1024xy 使用 ${#} 获取变量字符串长度。 [root@localhost etc]# s=helloworld [root@localhost etc]# echo "s.length = ${#s}" s.length = 10 2、引用脚本或函数参数 基于引用脚本的方式,1 表示 Shell 脚本文件名,n 从 2 开始表示第 n 个参数,第 2 个参数是 $2; [root@localhost ~]# echo 'echo $1 $2 $3' > ping.sh

30个经典shell脚本上

匿名 (未验证) 提交于 2019-12-03 00:03:02
注:转自https://weibo.com/linuxprobe?topnav=1&wvr=6&topsug=1&is_hot=1(刘遄老师的Linux就该这样学) 先了解下编写Shell过程中注意事项: 开头加解释器:#!/bin/bash 语法缩进,使用四个空格;多加注释说明。 命名建议规则:变量名大写、局部变量小写,函数名小写,名字体现出实际作用。 默认变量是全局的,在函数中变量local指定为局部变量,避免污染其他作用域。 有两个命令能帮助我调试脚本:set -e 遇到执行非0时退出脚本,set-x 打印执行过程。 写脚本一定先测试再到生产上。 1、获取随机字符串或数字 获取随机8位字符串: 方法1: # echo $RANDOM |md5sum |cut -c 1-8 471b94f2 方法2: # openssl rand -base64 4 vg3BEg== 方法3: # cat /proc/sys/kernel/random/uuid |cut -c 1-8 ed9e032c 获取随机8位数字: 方法1: # echo $RANDOM |cksum |cut -c 1-8 23648321 方法2: # openssl rand -base64 4 |cksum |cut -c 1-8 38571131 方法3: # date +%N |cut -c 1-8

shell 变量的高级用法

匿名 (未验证) 提交于 2019-12-02 23:45:01
案例:从头开始匹配,将符合最短的数据删除 ( # ) variable_1="I love you, Do you love me" echo $variable_1 variable_2=${variable_1#*ov} echo $variable_2    案例:从头开始匹配,将复合最短的数据删除( ## ) varible_3=${variable_1##*ov} echo $varible_3 案例:替换字符串,只替换第一次匹配成功的( / ) echo $PATH var6=${PATH/bin/BIN} echo $var6    案例:替换字符串,符合条件的全部替换 ( // ) var7=${PATH//bin/BIN} echo $var7    var=${str-expr}    如果变量 str 没有定义,那么var=expr 如果变量 str的字符串中有值,那么 变量 var 的值就等于 str变量的值 案例1 var="hello world" len=${#var} echo $len    案例2 var1="zhang biao" len=`expr length "$var1"` echo $len 获取字串在字符串中的索引位置 (把字串拆分成一个个的字串,最先匹配到的第一个就会返回) 案例 var="quickstart is a app"

使用Shell函数

匿名 (未验证) 提交于 2019-12-02 23:41:02
版权声明:苏苏吖 https://blog.csdn.net/weixin_44774638/article/details/91489472 问题 本案例要求编写两个Shell脚本,相关要求如下: 一个funexpr.sh脚本:由用户在执行时提供2个整数值参数,计算这2个整数的加、减、乘、除结果 为源码安装的Web服务编写服务脚本myhttpd:启动、停止操作都使用函数实现;已知httpd安装路径位于/usr/local/httpd 方案 在Shell脚本中,将一些需重复使用的操作,定义为公共的语句块,即可称为函数。通过使用函数,可以使脚本代码更加简洁,增强易读性,提高Shell脚本的执行效率 1)函数的定义方法 格式1: function 函数名 { 命令序列 … … } 格式2: 函数名() { 命令序列 … … } 一般来说,第二种格式比较常见。 比如,以下脚本代码可以定义一个名为helloworld1的函数(格式1),用来输出一段文字“Hello 1 World .”: function helloworld1 { echo “Hello 1 World .” } 以下脚本代码可以定义一个名为helloworld2的函数(格式2),用来显示调用此函数时提供的位置参数($ 表示所有参数的值): helloworld2() { echo "Hello, $ " } 2

shell 多线程编程和wait命令

匿名 (未验证) 提交于 2019-12-02 23:38:02
shell里面也是可以进行多线程编程的,而且十分方便,同时,wait命令可以进行shell的多线程同步控制。 1、启动后台子任务: sleep 10 #等待10秒,再继续下一操作 sleep 10 & #当前shell不等待,后台子shell等待 2、wait命令介绍 示例1:使用wait等待所有子任务结束 #!/bin/bash sleep 10 & sleep 5& wait #等待10秒后,退出 #!/bin/bash sleep 10 & sleep 5& wait $! #$!表示上个子进程的进程号,wait等待一个子进程,等待5秒后,退出 示例2:在函数中使用wait #!/bin/bash source ~/.bashrc fun(){ echo "fun is begin.timeNum:$timeNum" local timeNum=$1 sleep $timeNum & wait #这个只等待wait前面sleep echo "fun is end.timeNum:$timeNum" } fun 10 & fun 20 & wait #如果fun里面没有wait,则整个脚本立刻退出,不会等待fun里面的sleep echo "all is ending" 输出: fun is begin.timeNum:10 fun is begin.timeNum:20

shell 案例

匿名 (未验证) 提交于 2019-12-02 23:36:01
编写 hello world 脚本 #!/bin/bash echo "hello world" 通过位置变量创建 Linux 系统账户及密码 #!/bin/bash #$1 是执行脚本的第一个参数,$2 是执行脚本的第二个参数 useradd "$!" 每周 5 使用 tar 命令备份/var/log 下的所有日志文件 #vim /root/logbak.sh #编写备份脚本,备份后的文件名包含日期标签,防止后面的备份将前面的备份数据覆盖 #注意 date 命令需要使用反引号括起来,反引号在键盘<tab>键上面 tar -czf log- date +%Y%m%d .tar.gz /var/log 00 03 5 /root/logbak.sh 一键部署 LNMP(RPM 包版本) #!/bin/bash #使用 yum 安装部署 LNMP,需要提前配置好 yum 源,否则该脚本会失败 #本脚本使用于 centos7.2 或 RHEL7.2 systemctl start httpd mariadb systemctl enable httpd mariadb 实时监控本机内存和硬盘剩余空间,剩余内存小于 500M、根分区剩余空间小于 1000M 时,发送报警邮件给 root 管理员 #!/bin/bash #Author:丁丁历险(Jacob) #提取根分区剩余空间 disk

Shell脚本语言

匿名 (未验证) 提交于 2019-12-02 22:56:40
Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本,常见的脚本解释器有: bash:是Linux标准默认的shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的缩写,内部命令一共有40个。 sh: 由Steve Bourne开发,是Bourne Shell的缩写,sh 是Unix 标准默认的shell。 另外还有:ash、 csh、 ksh等。 常见的编程语言分为两类:一个是编译型语言,如:c/c++/java等,它们远行前全部一起要经过编译器的编译。另一个解释型语言,执行时,需要使用解释器一行一行地转换为代码,如:awk, perl, python与shell等。 Shell 经过了POSIX的标准化,所以它是可以在不同的linux系统上进行移植。 关于注释的问题: 在shell中使用#进行注释,注意,sh里面没有多行注释,只能每一行加一个#号; 第一个shell脚本程序: #!/bin/bash 上面中的 #! 是一种约定标记, 它可以告诉系统这个脚本需要什么样的解释器来执行; echo "Hello, world!" 变量: 定义变量: country="China" Number=100 注意: 1,变量名和等号之间不能有空格; 2,首个字符必须为字母(a-z,A-Z)。 3, 中间不能有空格,可以使用下划线

GDB使用

匿名 (未验证) 提交于 2019-12-02 22:56:40
由于工作的需要,开始学习GDB! 学习使用了GDB一段时间后,发现它真的好强大!好用! GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。 一般来说,GDB主要帮忙你完成下面四个方面的功能: 1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式) 3、当程序被停住时,可以检查此时你的程序中所发生的事。 4、动态的改变你程序的执行环境。 从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。让我们一一看来。 一个调试示例 ―――――― 源程序:tst.c 1 #include <stdio.h> 2 3 int func(int n) 4 { 5 int sum=0,i; 6 for(int i=0; i<n; i++) 7 { 8 sum+=i; 9 } 10 return sum; 11 } 12 13 14

在Centos 5.4上安装社区版Mysql5.1.41

匿名 (未验证) 提交于 2019-12-02 22:02:20
今天整理电脑的时候发现多年前的安装文档,share下。 安装Mysql服务,提供公司内部应用系统数据库服务。 PC机环境:IntelE5300 内存4G 硬盘500G 操作系统:Linux Centos 5.4 IP:192.168.0.23 shell>groupadd mysql shell>useradd -g mysql mysql shell>cd /tmp shell>wgethttp://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.41.tar.gz/from/http://mirror.trouble-free.net/mysql_mirror/ shell>tar zxvf mysql-5.1.41.tar.gz shell>cd mysql-5.1.41 shell>./configure --prefix=/usr/local/mysql --without-debug--with-extra-charsets=all --with-charset=utf8 --exec-prefix=/usr/local/mysql--with-pthread --enable-assembler --enable-thread-safe-client--with-mysqld-user=mysql --with