shell脚本

Shell传递参数

可紊 提交于 2020-01-10 15:04:23
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名: #!/bin/bash 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 另外,还有几个特殊字符用来处理参数: echo "Shell 传递参数实例!"; echo "第一个参数为:$1"; echo "参数个数为:$#"; echo "传递的参数作为一个字符串显示:$*"; 执行脚本 $ chmod +x test.sh $ ./test.sh 1 2 3 输出结果如下所示: Shell 传递参数实例! 第一个参数为:1 参数个数为:3 传递的参数作为一个字符串显示:1 2 3 * 与 @ 区别: 相同点:都是引用所有参数。 不同点:只有在双引号中体现出来

Linux下sh与bash的区别

房东的猫 提交于 2020-01-10 14:02:22
在学习shell脚本的过程中发现一个问题,使用./与sh 执行脚本的结果不同,如下: #!/bin/bash read -p "please input: " tmp echo ${tmp} [ "${tmp}" == "Y" ] || [ "${tmp}" == "y" ] && echo -e "OK,continue" && exit 0 [ "${tmp}" == "N" ] || [ "${tmp}" == "n" ] && echo -e "Oh,interrrupt" && exit 0 echo -e "I dont't know what you choice is" && exit 0 很是费解,明明在脚本中都声明了调用/bin/bash了,怎么结果还不同呢?于是查找资料,总结如下。 shell简介 第一个流行的shell是由Steven Bourne 发展出来的,为了纪念它就称为Bourne shell,或直接简称为 sh 而Linux使用的版本为Bourne Again SHell 简称为 bash ,这个shell是Bourne shell 的 增强版本 。 为什么bash与sh的不同 在Ubuntu中我们可以看到 我们打开man bash 可以看到 如果使用sh名称调用bash,它将尝试模拟启动尽可能接近历史版本sh的行为,而且符合POSIX标准。

adb命令对安卓apk的测试

为君一笑 提交于 2020-01-10 08:09:57
adb命令对安卓apk测试 adb的全称为Android Debug Bridge,就是起到调试桥的作用,是客户端测试常用的辅助工具。借助adb工具,我们可以管理设备或手机模拟器的状态。还可以进行很多终端操作,如安装软件、卸载软件、系统升级、运行shell命令等。adb就是Android终端(如手机/机顶盒)与PC端的桥梁,可以让用户在电脑上对手机进行全面的操作、记录终端操作日志。同时还可以使用adb命令在真机上对安卓包进行压测、崩溃日志查看等。 1 环境安装及配置 1.1 安装sdk环境 直接复制压缩包并解压到电脑本地后,包含以下文件 1.2 path环境配置 选中计算机–>点击右键–>选择【属性】–>【高级系统设置】–>【环境变量】,新建/修改变量 添加以下系统变量信息 ANDROID_HOME:E:\AppAuto\Sdk(sdk的安装目录) path:;%ANDROID_HOME%;%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools; 1.3 验证android环境 运行cmd 输入“android -h”,出现下图即环境搭建成功 1.4 验证adb运行环境 步骤1.1中的压缩包是包含adb的运行程序的,先在cmd中运行adb检查是否可用,出现下图即环境搭建成功 如果运行不成功,单独复制adb的运行程序到C:\Windows

shell编程2

大城市里の小女人 提交于 2020-01-10 05:21:18
-------条件测试 test命令用于测试字符串,文件状态和数字。 1、测试文件状态 test命令一般有2种格式:test condition或[ condition ]使用方括号时注意在条件两边加上空格。 常用的测试文件的条件表达式有: -d:目录;-s:文件长度大于0、非空;-f:正规文件;-w:可写;-L:符号连接;-u:文件有suid位设置;-r:可读;-x可执行。 如:测试first文件是否可写: test -w first echo $? 返回0说明可写,否则不可写;或着: [ -w first ] echo $? 可以实现同样的功能。 2、字符串测试 字符串测试有5种格式: test 'string' test string_operator 'string' test 'string1" string_operator "string2' [ string_operatoer 'string' ] [ 'string1' string_operator 'string2' ] 其中string_operator可以是以下符号: =: 两个字符串相等; !=: 两个字符串不等 -z: 空串 -n: 非空串 如:a="dfsd" b="sdgfg"测试a和b是否相等为: [ '$a' = '$b'] echo $? 返回0说明相等,否则不相等。 3、测试数值

shell常用测试命令

大兔子大兔子 提交于 2020-01-10 05:19:54
预定义变量:  预定义变量是由Bash程序预先定义好的一类特殊变量,用户只能使用预定义变量,而不能创建新的预定义变量,也不能直接为预定义变量赋值。预定义比变量使用"$"符合和另一个符号组合表示。 $#:表示获取命令中位置参数的个数。 $*:表示获取所有位置参数的内容。 $?:表示前一条命令执行后的返回状态,返回值为0表示执行正确,任何非0值均表示出现异常。 $0:表示获取当前执行的脚本或程序的名称。 $n:表示获取执行shell脚本的第n个参数,n=1..9,如果大于9用大括号括起来${10} $$:获取当前shell的进程号(pid) 示例:echo "$$" >m.pid $!:执行上一个指令的PID,上一个后台运行进程的进程号 $_:在此之前的命令(上一个命令)或脚本的最后一个参数 预定义变量进阶: $* : 将命令行所有参数视为单个字符串,等同于“$1$2$3” $@ : 将命令行每个参数视为单独的字符串,等同于“$1” “$2” “$3”。这是将参数传递给其他程序的最佳方法,因为他会保留所有内嵌在每个参数里的任何空白; 文件测试: -d测试是否为目录(Directory)。 -s file 文件大小非0时为真。 -e测试目录或文件是否存在(Exist)。 -f测试是否为文件(File)。 -r测试当前用户是否有权限读(Read)。 -w测试当前用户是否有权限写(Write

Shell编程-条件测试 | 基础篇

半腔热情 提交于 2020-01-10 05:16:28
什么是Shell Shell是一个命令解释器,它会解释并执行命令行提示符下输入的命令。除此之外,Shell还有另一个功能,如果要执行多条命令,它可以将这组命令存放在一个文件中,然后可以像执行Linux系统提供的其他程序一样执行这个文件,这个命令文件就叫做Shell程序或者Shell脚本。当运行这个文件时,它会像在命令行输入这些命令一样顺序地执行它们。 Shell脚本支持变量、命令行参数、交互式输入、函数模块、各种控制语句等高级编程语言的特性,如if、case、while和for等。利用Shell程序设计语言可以编写出功能非常复杂的脚本程序,把大量的任务自动化,尤其是那些需要输入大量命令而在执行过程中不太需要与用户进行干预的系统管理任务。 为了让Shell能读取并且执行Shell程序,Shell脚本的文件权限必须被设置为可读和可执行。为了让Shell可以找到程序,可以选择输入完全路径名,或者将这个脚本的路径放在PATH环境变量指定的路径列表中。Shell脚本不是复杂的程序,它是由上往下逐行解释执行的。脚本的第一行总是以“#!<Shell解释器文件路径>”开始,用来指定该脚本是使用那种Shell进行解释执行。 编写Shell脚本 1)使用VI或者其他任意的文本编辑工具创建一个名为HelloWorld.sh的文件,并在其中加入以下内容: [root@localhost ~]# vi

如何从另一个Shell脚本调用Shell脚本?

萝らか妹 提交于 2020-01-09 16:46:14
我有两个 shell 脚本 a.sh 和 b.sh 。 我怎么能叫 b.sh 从shell脚本中 a.sh ? #1楼 看一下这个。 #!/bin/ bash echo "This script is about to run another script." sh ./script.sh echo "This script has just run another script." #2楼 pathToShell="/home/praveen/" chmod a+x $pathToShell"myShell.sh" sh $pathToShell"myShell.sh" #3楼 您可以使用 /bin/sh 调用或执行另一个脚本(通过您的实际脚本): # cat showdate.sh #!/bin/bash echo "Date is: `date`" # cat mainscript.sh #!/bin/bash echo "You are login as: `whoami`" echo "`/bin/sh ./showdate.sh`" # exact path for the script file 输出为: # ./mainscript.sh You are login as: root Date is: Thu Oct 17 02:56:36 EDT 2013 #4楼

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