shell脚本

shell学习笔记

末鹿安然 提交于 2019-12-01 19:48:14
Shell Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 第一个shell脚本 1 #!/bin/bash 2 echo "Hello World !" #! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。 echo 命令用于向窗口输出文本。 运行 Shell 脚本有两种方法: 1、作为可执行程序 将上面的代码保存为 test.sh,并 cd 到相应目录: chmod +x ./test.sh #使脚本具有执行权限 ./test.sh #执行脚本 使用变量 使用一个定义过的变量,只要在变量名前面加美元符号即可,如: 1 your_name="xieshaoxiong" 2 echo $your_name 3 echo ${your_name} Shell 字符串 字符串可以用单引号,也可以用双引号,也可以不用引号。 str='this is a string' 拼接字符串 your_name="xieshaoxiong" # 使用双引号拼接 greeting="hello, "$your_name" !" greeting_1="hello, ${your_name} !" echo $greeting $greeting_1 # 使用单引号拼接

Shell 替换+运算符

早过忘川 提交于 2019-12-01 19:40:46
Shell 替换 Shell 替换:如果表达式中含有特殊字符时,Shell将会进行替换。例如,在双引号中使用变量是一种替换,转义字符也是一种替换。 转义字符替换 例:echo -e "Value a is $a \n" 如果不使用-e选项,将会原样输出 命令替换:Shell可以先执行命令,将结果暂时保存,在适当的地方输出 语法: `命令` 或 $(命令) 变量替换:变量 替换可根据变量的状态(是否为空,是否定义等)来改变它的值 形式 说明 ${var} 变量本来的值 ${var:-word} 如果变量 var 为空或已被删除(unset),那么返回 word,但不改变 var 的值。 ${var:=word} 如果变量 var 为空或已被删除(unset),那么返回 word,并将 var的值设置为 word。 ${var:?message} 如果变量 var 为空或已被删除(unset),那么将消息 message 送到标 准错误输出,可以用来检测变量 var 是否可以被正常赋值。 若此替换出现在Shell脚本中,那么脚本将停止运行。 ${var:+word} 如果变量 var 被定义,那么返回 word,但不改变 var 的值。 Shell 运算符 算数运算符 expr 是一款表达式计算工具,使用它能完成表达式的求值操作   注意:表达式和运算符之间要有空格 完整的表达式要被

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 19:36:32
本地变量: 定义:VAR_NAME=VALUE 变量引用:${VAR_NAME} 取消变量:unset VAR_NAME 相当于java中的私有变量(private),只能当前类使用,子类和其他类都无法使用。 环境变量: 自定义的环境变量对当前shell进程及其子shell进程有效,对其它的shell进程无效 定义:export VAR_NAME=VALUE 对所有shell进程都有效需要配置到配置文件中 vi /etc/profile source /etc/profile 相当于java中的protected修饰符,对当前类,子孙类,以及同一个包下面可以共用。 局部变量: 在函数中调用,函数执行结束,变量就会消失 对shell脚本中某代码片段有效 定义:local VAR_NAME=VALUE 相当于java代码中某一个方法中定义的变量,只对这个方法有效。 单引号, 双引号, 反引号 ''单引号不解析变量 ""双引号会解析变量 ``反引号是执行并引用一个命令的执行结果,类似于$(...) 来源: https://www.cnblogs.com/snow-man/p/11714854.html

Android adb 使用详细介绍(含adb使用命令行)

余生长醉 提交于 2019-12-01 19:15:08
Android调试桥接器,简称adb,是用于管理模拟器或真机状态的万能工具,采用了客户端-服务器模型,包括三个部分: l 客户端部分,运行在开发用的电脑上,可以在命令行中运行adb命令来调用该客户端,像ADB插件和DDMS这样的Android工具也可以调用adb客户端。 l 服务端部分,是运行在开发用电脑上的后台进程,用于管理客户端与运行在模拟器或真机的守护进程通信。 l 守护进程部分,运行于模拟器或手机的后台。 当启动adb客户端时,客户端首先检测adb服务端进程是否运行,如果没有运行,则启动服务端。当服务端启动时,它会绑定到本地的TCP5037端口,并且监听从adb客户端发来的命令——所有的adb客户端都使用5037端口与adb服务端通信。 接下来服务端与所有正在运行的模拟器或手机连接。它通过扫描5555-5585之间的奇数号端口来搜索模拟器或手机,一旦发现adb守护进程,就通过此端口进行连接。需要说明的是,每一个模拟器或手机使用一对有序的端口,偶数号端口用于控制台连接,奇数号端口用于adb连接,例如: Emulator 1, console: 5554 Emulator 1, adb: 5555 Emulator 2, console: 5556 Emulator 2, adb: 5557 ... 即如果模拟器与adb在5555端口连接,则其与控制台的连接就是5554端口。

Linux Shell中\'$\'符号的N种用法

我是研究僧i 提交于 2019-12-01 18:49:08
在Shell中 $ 是一个特殊的字符,在不同场景中有不同的用法。 引用变量 使用 $ 直接引用变量,包括循环变量。 123 root@iZ2ze43t8c5urajez7ws4eZ:~# x=1root@iZ2ze43t8c5urajez7ws4eZ:~# echo $x1 双引号 " 括起来的字符串支持变量插值。 123 root@iZ2ze43t8c5urajez7ws4eZ:~# x=1root@iZ2ze43t8c5urajez7ws4eZ:~# echo "x = $x"x = 1 使用 ${} 作为单词边界。 123 root@iZ2ze43t8c5urajez7ws4eZ:/var/log/nginx# x=1root@iZ2ze43t8c5urajez7ws4eZ:/var/log/nginx# echo "x = ${x}yz"x = 1yz 使用${#}获取变量字符串长度。 123 root@iZ2ze43t8c5urajez7ws4eZ:/var/log/nginx# s=helloroot@iZ2ze43t8c5urajez7ws4eZ:/var/log/nginx# echo "s.length = ${#s}"s.length = 5 引用脚本或函数参数 基于下标的引用方式,0表示shell脚本文件名,n从1开始表示第n个参数,第1个参数是$1。

Linux Shell中\'$\'符号的N种用法

三世轮回 提交于 2019-12-01 18:32:57
在Shell中 $ 是一个特殊的字符,在不同场景中有不同的用法。 引用变量 使用 $ 直接引用变量,包括循环变量。 123 root@iZ2ze43t8c5urajez7ws4eZ:~# x=1root@iZ2ze43t8c5urajez7ws4eZ:~# echo $x1 双引号 " 括起来的字符串支持变量插值。 123 root@iZ2ze43t8c5urajez7ws4eZ:~# x=1root@iZ2ze43t8c5urajez7ws4eZ:~# echo "x = $x"x = 1 使用 ${} 作为单词边界。 123 root@iZ2ze43t8c5urajez7ws4eZ:/var/log/nginx# x=1root@iZ2ze43t8c5urajez7ws4eZ:/var/log/nginx# echo "x = ${x}yz"x = 1yz 使用${#}获取变量字符串长度。 123 root@iZ2ze43t8c5urajez7ws4eZ:/var/log/nginx# s=helloroot@iZ2ze43t8c5urajez7ws4eZ:/var/log/nginx# echo "s.length = ${#s}"s.length = 5 引用脚本或函数参数 基于下标的引用方式,0表示shell脚本文件名,n从1开始表示第n个参数,第1个参数是$1。

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: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