(一)首先来看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(二)关于脚本的更多相关文章

  1. 一个改动配置文件的linux shell script

    不久以前,以前搜到一篇博客是读取配置文件的,http://www.cnblogs.com/bo083/archive/2012/11/19/2777076.html,用到如今,感觉十分方便.感谢作者. ...

  2. Linux shell script All In One

    Linux shell script All In One refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  3. Linux shell编写端口扫描脚本

    Linux shell编写端口扫描脚本 需求: 扫描特定主机 扫描特定主机的特定端口 扫描特定网段 扫描特定网段中哪些主机开放了特定的端口 源码如下: #/bin/bash #该脚本用于对特定目标主机 ...

  4. linux shell 写swoole重启脚本

    linux shell 写swoole重启脚本 代码如下<pre>#!/bin/shkill `lsof -t -i:9501`sleep 2php /data/web/mircoweb/ ...

  5. Linux shell批量执行scp脚本工具

    转载: linux shell + expect:批量scp脚本工具             2011-09-13 15:51:06 分类: Python/Ruby 最近在准备一个部署的任务,其中有一 ...

  6. Linux Shell Script目录

    目录 Linux Shell基础 开始Shell编程 代码 示例代码查看:https://github.com/Furzoom/demo-C/tree/master/src/shell

  7. shell script 二 判断符号【】 shift 偏移量 if then fi

    判断符号[]类似于test.但是[]有通配符及正则表达式,为了区分,利用[]来做判断时,前后都需要加空格来区分.又一个坑 [ -z "$HOME" ];echo $? 例: 1 r ...

  8. Linux shell Script初识

    shell secript: 执行方式的差异: ./ sh执行都是在创建一个子程序来执行,只会继承环境变量, 其中的变量如果export声明,子程序的子程序会继承,不会升级为环境变量 source 的 ...

  9. Linux shell简单创建用户脚本

    前面介绍简单的shell编写规则. 现在开始编写一个简单的shell脚本. Linux shell介绍 编写shell脚本    1.创建脚本文件    2.根据需求,编写脚本    3.测试执行脚本 ...

随机推荐

  1. 深入浅出 Cocoa 之 Core Data(2)- 手动编写代码

    深入浅出 Cocoa 之 Core Data(2)- 代码示例 罗朝辉(http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 前面详细讲解了 Core Data 的框 ...

  2. cocos2dx 2.x新建项目

    举例: cocos2d-x-2.2.6/tools/project-creator 进入 这个文件夹 chmod 777 project-cereator.py ./create_project.py ...

  3. DEDECMS图片集上传图片出错302的解决办法

    无忧主机(www.51php.com)小编今天在调试dede网站的时候发现了一个问题,因为小编想在网站上增加一个图片集的栏目,于是就到后台图片集栏目去添加内容,谁知在上传图片的时候给我弹出个错误信息框 ...

  4. phpexcel设置所有单元格的默认对齐方式

    代码如下,从国外论坛上找到的 $objPHPExcel->getDefaultStyle()->getAlignment()->setHorizontal(PHPExcel_Styl ...

  5. 查找python项目依赖并生成requirements.txt

    1.如果使用virtualenv环境,直接使用 pip freeze > requirements.txt ➜  ~ .virtualenvs/xxx/bin/pip freeze > r ...

  6. appium查找元素心得

    在使用appium测试app的时候并没有selenium那么好用,为什么呢? 个人觉得是因为定位方式太少,selenium中的xpath已经强大到基本可以找到任何一个元素. 但是在appium中xpa ...

  7. android MPChart图标使用具体解释

    近期项目里有要加入更加复杂的图标了,曾经一些简单的曲线图,饼状图.风险指示图等,都是自己画.随着难度的添加.越来越力不从心.曾经研究过achartenginee图标框架,但发现achartengine ...

  8. UNP学习笔记(第七章 套接字选项)

    有多种方法获取和设置影响套接字的选项: 1.getsockopt和setsockopt函数 2.fcntl函数 3.ioctl函数 getsockopt和setsockopt函数 这两个函数仅用于套接 ...

  9. 【Python】删除字符串的空白

    在程序中,额外的空白可能让人迷惑,对于程序员来说,'python'跟'python '看起来几乎一样,但是对于程序来说,可是千差万别 (lstrip)删除开头空白 >>> Langu ...

  10. 转 FreeBSD 安装JDK

    cd /usr/ports/java/openjdk6make install clean 默认什么都不用选,因为我们配置的是运行环境, 中间编译过程好久... 偷懒的干脆就直接安装/usr/port ...