一起来学linux:shell script(二)关于脚本
(一)首先来看shell脚本的执行方式,shell脚本的后缀名都是sh文件。
1 sh test.sh
2 source test.sh
这两种方式有什么区别呢。test.sh 里的脚本很简单, 从键盘输入名字后赋值个name变量
read -p “Please input your name:” name
执行如下
root@zhf-linux:/home/zhf/zhf/shell_prj# sh test1.sh
please input your name:zhf
root@zhf-linux:/home/zhf/zhf/shell_prj# echo $name
echo
$name是空值。原因前面介绍过。bash在执行脚本的时候,是另起一个子进程。当子进程完成后,子进程内的变量不会传入父进程中去
但是用source执行脚本就不一样了。
原因在于source对script的执行方式是在父进程中进行的。
root@zhf-linux:/home/zhf/zhf/shell_prj#
source test1.sh
please
input your name:zhf
root@zhf-linux:/home/zhf/zhf/shell_prj#
echo $name
zhf
在脚本中,避免不了要进行各种条件判断。条件判断有test
和[]两种方式
test方式:
read
-p "please input your name:" name
test
-z $name && echo "you must input your name"
-z
是判断字符串是否为0也就空字符串,如果是,则提示输入名字
root@zhf-linux:/home/zhf/zhf/shell_prj#
sh test1.sh
please
input your name:
you
must input your name
test有很多判断参数,具体可以用man
test的进行查看
[]方式:
read
-p "please input your name:" name
[
-z "$name" ] && echo "please input your name"
使用[]有几点需要注意:
1
在中括号内的每个组件都需要有空格键来分隔
2
在中括号内的变量都需要用双引号起来
关于第二点,如果不用双引号括起来,会引起如下问题:
root@zhf-linux:/home/zhf/zhf/shell_prj#
name="cq zhf"
root@zhf-linux:/home/zhf/zhf/shell_prj#
[ $name == "cq zhf" ]
bash:
[: too many arguments
原因在于$name=cq
zhf, 如果没有双括号,那么上面的不等式就等于
cq
zhf == “cq zhf”。系统会认为是2个变量,因此提示too
many arguments.
(二)script的变量。
在执行脚本的时候,会传入某些参数。那么在脚本里面如何监控这些参数呢
$#代表参数的个数
$@得到全部的参数
$1,$2…..代表的是各个参数。其中$0是指的脚本名称。
root@zhf-linux:/home/zhf/zhf/shell_prj#
sh test1.sh one two three
The
scritp name is test1.sh
The
total number of parameter is 3
The
first parameter is one
如果输入的变量太多,单从顺序上去记忆也比较麻烦,有一种参数偏移的方法可以省事一些。shift命令。这个命令的作用好比是一个FIFO的栈。
root@zhf-linux:/home/zhf/zhf/shell_prj#
sh test1.sh one two three
The
scritp name is test1.sh
The
total number of parameter is 3
The
first parameter is one
The
first parameter is two
其他流程控制语句,例如if,
when, for...do...done等都和其他语言用法类似。
一起来学linux:shell script(二)关于脚本的更多相关文章
- 一个改动配置文件的linux shell script
不久以前,以前搜到一篇博客是读取配置文件的,http://www.cnblogs.com/bo083/archive/2012/11/19/2777076.html,用到如今,感觉十分方便.感谢作者. ...
- Linux shell script All In One
Linux shell script All In One refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
- Linux shell编写端口扫描脚本
Linux shell编写端口扫描脚本 需求: 扫描特定主机 扫描特定主机的特定端口 扫描特定网段 扫描特定网段中哪些主机开放了特定的端口 源码如下: #/bin/bash #该脚本用于对特定目标主机 ...
- linux shell 写swoole重启脚本
linux shell 写swoole重启脚本 代码如下<pre>#!/bin/shkill `lsof -t -i:9501`sleep 2php /data/web/mircoweb/ ...
- Linux shell批量执行scp脚本工具
转载: linux shell + expect:批量scp脚本工具 2011-09-13 15:51:06 分类: Python/Ruby 最近在准备一个部署的任务,其中有一 ...
- Linux Shell Script目录
目录 Linux Shell基础 开始Shell编程 代码 示例代码查看:https://github.com/Furzoom/demo-C/tree/master/src/shell
- shell script 二 判断符号【】 shift 偏移量 if then fi
判断符号[]类似于test.但是[]有通配符及正则表达式,为了区分,利用[]来做判断时,前后都需要加空格来区分.又一个坑 [ -z "$HOME" ];echo $? 例: 1 r ...
- Linux shell Script初识
shell secript: 执行方式的差异: ./ sh执行都是在创建一个子程序来执行,只会继承环境变量, 其中的变量如果export声明,子程序的子程序会继承,不会升级为环境变量 source 的 ...
- Linux shell简单创建用户脚本
前面介绍简单的shell编写规则. 现在开始编写一个简单的shell脚本. Linux shell介绍 编写shell脚本 1.创建脚本文件 2.根据需求,编写脚本 3.测试执行脚本 ...
随机推荐
- Akka之Circuit Breaker
这周在项目中遇到了一个错误,就是Circuit Breaker time out.以前没有接触过,因此学习了下akka的断路器. 一.为什么使用Circuit Breaker 断路器是为了防止分布式系 ...
- Windows网络编程 2 【转】
Windows网络编程使用winsock.Winsock是一个基于Socket模型的API,在Windows系统中广泛使用.使用Winsock进行网络编程需要包含头文件Winsock2.h,需要使用库 ...
- MD5算法了解(JAVA实现)
MD5算法:尽管已经被破解,但任然广泛应用于各个领域中 如文件校验:当我们下载文件时为了保证文件的安全性,我们能够在其站点上找到相应的md5值进行校验,假设md5值不一致,也就是说文件被人动过(一般都 ...
- excel导出 jxl.jar包
导入jxl.jar包, 代码如下: package com.gree; import java.io.IOException; import java.io.OutputStream; import ...
- iOS 振动反馈
代码地址如下:http://www.demodashi.com/demo/12461.html 1. 常用场景 继 iPhone7/7P 实体 home 键出现后,home 键再也无法通过真实的物理按 ...
- 3DES
3DES是继DESeasy被破解后的DES加密升级版,它属于对称加密. 可指定24位长度的密钥.在java API中也有事实上现,代码例如以下: /** * 3DES 的Java SDK API 实现 ...
- 关于meta标签的name="viewport" 概述
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scal ...
- 将C#文档注释生成.chm帮助文档(转)
由于最近需要把以前的一个项目写一个文档,但一时又不知道写成怎样的,又恰好发现了可以生成chm的工具,于是乎我就研究了下,感觉还不错,所以也给大家分享下.好了,不多废话,下面就来实现一下吧. 生成前的准 ...
- CSS3进度条 和 HTML5 Canvas画圆环
看到一些高大上的进度条插件,然后想自己用CSS写.经过搜索资料之后,终于成功了.为了以后方便拿来用,或者复习.将代码贴出. HTML代码: 只需要两个div,外面的为一个有border的div id为 ...
- 基于RedHat发行的Apache Tomcat本地提权漏洞
描述 Tomcat最近总想搞一些大新闻,一个月都没到,Tomcat又爆出漏洞.2016年10月11日,网上爆出Tomcat本地提权漏洞,漏洞编号为CVE-2016-5425.此次受到影响的主要是基于R ...