shell for循环

shell 之 数组

有些话、适合烂在心里 提交于 2019-12-02 03:31:11
函数传参使用场景示例,需求描述:写一个脚本,实现nginx服务的启动、停止、重启。 [root@shell day06]# cat nginx.sh #!/bin/bash source /etc/init.d/functions if [ $# -ne 1 ];then echo "Usage: $0 {start|stop|status|reload|restart}" exit fi rc=$1 retu() { if [ $? -eq 0 ];then action "Nginx is $rc 成功!" /bin/true else action "Nginx is $rc 失败!" /bin/false fi } start() { if [ ! -f /var/run/nginx.pid ];then /usr/sbin/nginx retu else echo "Nginx 服务正在运行....." fi } stop() { if [ -f /var/run/nginx.pid ];then /usr/sbin/nginx -s stop retu else echo "Nginx 服务不在运行......" fi } reload() { if [ -f /var/run/nginx.pid ];then /usr/sbin/nginx -s reload

第二章 Shell变量定义

馋奶兔 提交于 2019-12-02 01:47:06
1. Shell变量概述 1. 什么是变量 变量是Shell传递数据的一种方法,简单理解:用一个固定的字符串去表示不固定的内容,便于后续引用。 2.变量命令规范 变量定义时名称有要求:字母、数字、下划线几个组成,尽量字母开头,变量名最好具备一定的含义。 ip=10.0.0.100 ip1=10.0.0.100 Hostname_Ip=10.0.0.100 hostname_IP=10.0.0.100 等号是赋值,需要注意:等号两边不能有空格,其次定义的变量不要与系统命令出现冲突。 3. Shell变量定义的方式 01)用户自定义变量:人为定义的变量名称。 02)系统环境变量:保存的是和系统操作环境相关的数据。 03)位置参数变量:向脚本中进行参数传递,变量名不能自定义,变量作用是固定的。 04)预定义的变量:是bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。 4. Shell变量定义实践 01.用户自定义变量示例,当前Shell有效 #1.定义变量,变量名=变量值。不能出现"-横岗"命令 #定义变量有空格时,必须使用引号 [root@cc ~]# cc="hello shell" #2.引用变量,$变量名 或 ${变量名} [root@cc ~]# echo $cc hello shell [root@cc ~]# echo $cc_test [root@cc ~

技术干货:Linux Shell 编程基础,看这一篇就够了!

耗尽温柔 提交于 2019-12-02 00:30:10
本文摘要 本文主要介绍 Linux Shell 编程的基础知识,包含下面 8 个方面 : Shell 编程概述 Shell 关键字 Shell 变量 Shell 运算 Shell 语句 Shell 函数 Shell 调试 Shell 易错点 下面一一介绍。 Shell 编程概述 在 Linux 下有一门脚本语言叫做: Shell 脚本 ,这个脚本语言可以帮助我们简化很多工作,例如编写自定义命令等,所以还是很有必要学习它的基本用法的,一个简单的 hello.sh 脚本像下面这样, 第一行 #!/bin/bash 标识该 Shell 脚本由哪个 Shell 解释 : #!/bin/bash echo "Hello World!" 赋予权限才可以执行 : # 赋予可执行权限 chmod a+x hello.sh # 执行 ./hello.sh # 结果 Hello World! Shell 的编写流程: 1. 编写 Shell 脚本 2. 赋予可执行权限 3. 执行,调试 下面来介绍具体的语法。 Shell 关键字 常用的关键字如下: 1. echo:打印文字到屏幕 2. exec:执行另一个 Shell 脚本 3. read:读标准输入 4. expr:对整数型变量进行算术运算 5. test:用于测试变量是否相等、 是否为空、文件类型等 6. exit:退出 看个例子: #!/bin

Linux下Shell入门

落爺英雄遲暮 提交于 2019-12-01 23:58:00
Shell是人和计算机之间交流的''翻译官'',通过Shell终端解释器,可以访问到系统内核的服务,Shell执行需要脚本解释器,以及一个编写脚本的工具,一般解释器使用/bin/bash,脚本工具使用vim。Shell跟其他编程语言一样,也支持参数和变量、流程控制、分支等特性,下面简单了解一下。 脚本解释器 通过cat /etc/shells可以查看系统提供的shell脚本解释器,通过echo $SHELL命令可以查看当前默认使用的解释器,可以看出默认情况下是用/bin/bash。 # 查看提供的[root@node01 /home/yangchaolin/hehe]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin /bin/dash /bin/tcsh /bin/csh# 查看默认使用的 [root@node01 /home/yangchaolin/hehe]# echo $SHELL /bin/bash 第一个Shell脚本 下面写一个输出"hello world"的脚本,来完成第一个shell脚本。 # vim命令进入脚本编辑[root@node01 /home/yangchaolin/shell]# vim shell01.sh# 编辑完查看 [root@node01 /home/yangchaolin/shell]#

初识 Shell脚本

做~自己de王妃 提交于 2019-12-01 22:11:26
摘要 什么是Shell Shell的分类 在linux上搭建Shell编程环境 Shell 如何执行 交互式程序 创建脚本 Shell脚本的参数 Shell脚本的基本元素 指定命令解读器 Shell脚本中的注释和风格 如何执行Shell程序 Shell程序的退出状态 变量和引用 变量的命令 变量的类型 变量和引号 变量的作用域 系统变量 环境变量 变量赋值 引用变量的值 清除变量 引用符号 命令替换 条件测试 条件测试 字符串测试 整数测试 文件测试 逻辑操作符 条件判断语句 多条件判断语句case 运算符 执行算术运算 位运算符 自增/自减运算符 循环结构 带列表的for循环语句 类C风格的for循环语句 什么是Shell 在Linux系统中,Shell是用户与系统内核之间进行交互的接口。 Shell这个单词的意思是“外壳”,它形象地表达出了Shell的作用。在UNIX以及Linux中,Shell就是套在内核外面的一层外壳。正因为有Shell的存在,才向普通的用户隐藏了许多关于系统内核的细节。 Shell又称命令解释器,它能识别用户输入的各种命令,并传递给操作系统。它的作用类似于Windows操作系统中的命令行,但是,Shell的功能远比命令行强大得多。在UNIX或者Linux中,Shell既是用户交互的界面,也是控制系统的脚本语言。 Shell的分类 关于Shell的分类

Shell ==> 基础

时光总嘲笑我的痴心妄想 提交于 2019-12-01 19:38:06
一、规范 Shell脚本是以.sh结尾的文件; sh 文件的第一行内容为 #!/bin/bash,它告诉系统使用(Bourne Again Shell)解释器来执行; shell 中的注释:# ; shell 文件的执行有两种方式: sh 文件名.sh; 添加可执行权限:chmod +x 文件名.sh ,再进入文件所在目录,执行 ./文件名.sh; 二、变量 变量名=变量值:等于号两边不能有空格; 变量命名规范:不能以数字开头,可以由字母、数字、下划线组成; 输出变量内容:echo $变量名; 变量的释放:unset 变量名; 特殊的变量,带有空格的变量定义 双引号"":如果变量值中存在 $变量名 的话,那么输出结果将会是变量名对应的变量值。如果想原样输出内容,可以在 $变量名 前面加转义字符 “\”; 单引号'':如果变量值中存在 $变量名,那么将原样输出; 反单引号``:存放的是命令; 练习: #!bin/bash dir=`pwd` echo "当前所在的目录是:$dir" 输出当前所在的目录 #!bin/bash # 进入/etc目录下 cd /etc # 计算文件个数 num=`ls -al|wc -l` # 输出 echo "/etc下文件个数为:$num" 计算/etc目录下有多少个文件 #!bin/bash read -p "请输入指定目录:" dir cd

shell 第七章 正则的应用

删除回忆录丶 提交于 2019-12-01 18:27:36
第七章 Shell正则应用 1. 正则表达式概述 2. 正则表达式规则 3. 正则表达式之GREP文本过滤 4. 正则表达式之SED文本处理 5. 正则表达式之AWK文本处理 1. 正则表达式概述 01. 什么是正则表达式 正则表达式`regular expression`, RE是一种字符模式,用于在查找过程中匹配指定的字符。 02. 为什么要使用正则表达式? 在工作中,我们时刻面对着大量的日志,程序,以及命令的输出。迫切的需要过滤我们需要的一部分内容,甚至是一个字符串。比如: 现在有一个上千行的文件,我们仅需要其中包含"root"的行,怎么办? 此时就需要使用到正则表达式的规则来筛选想要的内容。 03. 正则表达式注意事项 1.正则表达式应用非常广泛,存在于各种语言中,例如:php,python,java等。 2.正则表达式和通配符特殊字符是有本质区别的 3.要想学好grep、sed、awk首先就要掌握正则表达式。 4.注意正则神坑,中文符号。 2. 正则表达式规则 正则表达式 描述 \ 转义符,将特殊字符进行转义,忽略其特殊意义 ^ 匹配行首,^是匹配字符串的开始 $ 匹配行尾,$是匹配字符串的结尾 ^$ 表示空行 .(点) 匹配换行符之外的任意单个字符 [ ] 匹配包含在[字符]之中的任意一个字符 [^] 匹配[^]之外的任意一个字符 [a-z] 匹配[

shell编程

亡梦爱人 提交于 2019-12-01 17:48:16
shell特殊变量: $0 当前脚本的文件名 $n 传递给脚本或函数的参数; n 是一个数字,表示第几个参数;也可以用于函数的参数 $# 传递给脚本或函数的参数个数 $* 传递给脚本或函数的所有参数 $@ 传递给脚本或函数的所有参数 $? 上个命令的退出状态,或函数的返回值 $$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID $* 和 $@ 的区别: $* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号""包含时,都以"$1" "$2" … "$n" 的形式输出所有参数 当它们被双引号""包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数 运算符: 算术运算符:+ - * / % =(赋值) == != 关系运算符:-ne -eq -gt -lt -ge -le 布尔运算符:!(非) -o(或) -a(与) 字符串运算符:== != -z(空) -n(非空) 文件测试操作: -e 文件是否存在 -f 是否为普通文件 -d 是否为目录 -w 是否具有写权限 -x 是否具有执行权限 条件语句: if <condition> then   <statement> fi if <condition> then   

shell 的概述

回眸只為那壹抹淺笑 提交于 2019-12-01 17:27:35
1. Shell变量概述 1. 什么是变量 · 变量是Shell传递数据的一种方法,简单理解:用一个固定的字符串去表示不固定的内容,便于后续引用。 2.变量命令规范 变量定义时名称有要求:字母、数字、下划线几个组成,尽量字母开头,变量名最好具备一定的含义。ip=10.0.0.100ip1=10.0.0.100Hostname_Ip=10.0.0.100hostname_IP=10.0.0.100等号是赋值,需要注意:等号两边不能有空格,其次定义的变量不要与系统命令出现冲突。 3. Shell变量定义的方式 01)用户自定义变量:人为定义的变量名称。 02)系统环境变量:保存的是和系统操作环境相关的数据。 03)位置参数变量:向脚本中进行参数传递,变量名不能自定义,变量作用是固定的。 04)预定义的变量:是bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。 4. Shell变量定义实践 01.用户自定义变量示例,当前Shell有效 #1.定义变量,变量名=变量值。不能出现"-横岗"命令 [root@qiudao ~]# qiudao="hello shell" #定义变量有空格时,必须使用引号#2.引用变量,$变量名 或 ${变量名} [root@qiudao ~]# echo $qiudao hello shell [root@qiudao ~]# echo

shell 变量

别等时光非礼了梦想. 提交于 2019-12-01 17:08:47
在/backup下创建10个.txt的文件,找到/backup目录下所有后缀名为.txt的文件 1)批量修改txt为txt.bak 2)把所有的.bak文件打包压缩为123.tar.gz 3)批量还原文件的名字,及把增加的.bak再删除 [root@shell shell]# vim mv.sh #!/bin/bash Dir=/backup #判断目录是否存在,不存在则创建 [ -d $Dir ] || mkdir -p $Dir #创建10个文件 touch $Dir/{1..10}.txt #找到这些文件,进行批量修改名称 find $Dir -type f -name "*.txt" >$Dir/txt.log #批量修改文件名 sed -r 's#(.*)#mv \1 \1.bak#g' $Dir/txt.log |bash #打包压缩为123.tar.gz tar czf $Dir/123.tar.gz $Dir/*.bak #批量进行还原文件名 find $Dir -type f -name "*.bak" >$Dir/bak.log #还原 sed -r 's#(.*).bak#mv \1.bak \1#g' $Dir/bak.log |bash for循环方式修改 [root@shell shell]# vim for_name.sh #!/bin/bash