Linux下的SHELL脚本常以 *.sh 为后缀,和Windows下的批处理脚本 *.bat *.cmd功能一致,但是功能和语法都要更强大。SHELL是一门脚本语言。本文介绍SHELL的语法及用法。

1. 开始使用

在Linux下新建一个文本文件,命名为test.sh,并输入以下内容:

#!/bin/sh
echo hello,world

【注】
- 第1行是必须的,用以表示本脚本由哪个程序来执行,此处是用 /bin/sh 程序执行
- 文本文件要使用unix/linux格式,即换行符为\n;与此对照的是,Windows下建立的文件文件是以 \r\n结尾。可以用三种方法确保这一点:
   (1) 对于新手来说,可以在Linux下用vi或gedit来建立此文件,可以保证是unix格式
   (2) 或者在windows下建立此文件,然后在linux使用dos2unix命令来改格式
   (3) 在Windows下,用Notepad++软件进行编辑, 在菜单的"编辑 | 档案格式转换 | 转为unix格式"

2. 执行脚本

脚本在书写好了之后,有几种执行方法。

(1)  sh  test.sh
这里用/bin/sh这种程序来解释执行test.sh

(2)  ./test.sh
这是把test.sh当作一个可执行文件来执行。要求:
     - test.sh有可执行属性   chmod +x test.sh
     - test.sh第一行是  #!/bin/sh

(3)  .   test.sh
点号也是可以执行脚本的。和前面的区别是,用点号执行时脚本的变量将自动输出到当前环境中。而用前面2种方法执行时,脚本中的变量不会注入到当前环境(除非显示地export)

举例来说,用点号执行以下脚本

#!/bin/sh
TEST_HOME=here

和用命令执行

#!/bin/sh
export TEST_HOME=here

效果是一样的。下面我们统一用(1)种办法来执行脚本,因此也要求显示地用export来输出变量。

3. 变量

SHELL里的变量都是字符串

(1) 变量定义

AUTHOR_NAME=shaofa
USER_COUNT=12
【注】

- 等号两边不可以用空
- 变量的值会被看作字符串,不会被看作数字 【这可能有点难以理解,通常用expr函数来得到一个数字】
- 语句无需以分号结尾
- 值不需要用引号括起来

(2) 变量使用

$AUTHOR_NAME

${AUTHOR_NAME}
用$表示取变量的值

(3) 变量导出
export AUTHOR_NAME=shaofa

AUTHOR_NAME=shaofa
export AUTHOR_NAME
(4) 取消变量

unset AUTHOR_NAME
可以从当前环境变量里取消一个变量

4. 函数

SHELL中也是支持函数的定义的。例如:

#!/bin/shfunction my_test()
{_ARG1=$1;_ARG2=$2;echo "Got Argument: ${_ARG1}, ${_ARG2}"return 0;
}my_test  aaa  bbb

注:

- 函数的参数不会显式的列在括号里,但可以在代码里用 $1, $2 ... 引用
- 参数的个数貌似是有限制的,应该是从1到9
- 函数调用时,把参数列在后面,以空格分开,末尾不用加分号
- 函数可以return一个整数,作为返回码。也可以直接return退出函数

5. 条件测试

在if ... else, while等控制语句,必须有条件测试。

#!/bin/shif [ -f a.txt ]; thenecho "File Exist."
elseecho "File Not Exist."
fi

注意方括号内[ ],这里就是测试条件。其中 -f a.txt表示判断a.txt是否存在。【注】方括号内左右都要有空格,不能把各部分连在一起写

文件条件测试

-d  是否为目录
-f   是否为文件
-L 是否为链接
-r 是否可读
-w 是否可写
-s 是否为空(长度为0)
-x 是否可执行
-u 是否有suid标志

字符串条件测试

=  字符串相同
!= 字符串不等
-z 字符串为空
-n 字符串非空
字符串测试时,要把变量放在引号里,下面是一个例子

NAME=a
if [ -z "$NAME" ]; thenecho "String Is Null."
elseecho "String Is Not Null."
fi

数值测试

-eq   即=
-ne   即!=
-gt    即>
-lt     即<
-ge  即>=
-le   即<=
数值比较时,可以把变量放在引号,也可以不用引号

多个条件的与或关系

条件与:  -a
条件或: -o

例:

[  -f   1.txt  -a  -f  2.txt ]  表示文件1.txt和2.txt同时存在为有效

6. 流程控制

(1)  if ... else

if  [ 条件  ];  then

....

fi

if [ 条件 ]; then

....

elif [ 条件 ] ; then

....

else

....

fi

(2)

【SHELL】 Linux SHELL 脚本语法及使用参考相关推荐

  1. linux时间同步命令shell,LINUX时间同步脚本或命令

    Linux系统和windows不同的地方,如果时间和网络时间差距太大的话.可能会导致程序,进程启动不了.下面是学习啦小编收集整理的LINUX时间同步脚本或命令,希望对大家有帮助~~ LINUX时间同步 ...

  2. linux 关机 shell,linux shell的关机命令是什么

    linux shell命令下我们可以通过相关命令关闭和重启计算机,下面由学习啦小编为大家搜集整理了linux shell的关机命令是什么的相关知识,希望对大家有帮助! linux shell的关机命令 ...

  3. linux不能使用的shell,linux shell脚本教程冰焰今天为不能用了

    很简单的,现在就尝试一下吧 PublicFunctionDecryptFlashFXP(passwordAsString)AsString DimxAsInteger Dimmagic()AsStri ...

  4. linux index shell,Linux shell 数组使用

    Ubuntu12.04 TLS 64bit, bash 4.2.25 一.定义 数组是一些数据的集合,分为两个类型 (1)普通数组,只能使用整数作为索引 (2)关联数组,可以使用字符串作为索引,bas ...

  5. cpu 指锟筋集 linux锟介看 shell,Linux Shell中PS命令中的%CPU的含义介绍

    PS命令中的%CPU是指一个进程占用CPU的时间百分比,那么具体的含义是什么呢? PS的man手册的解释是这样的: cpu utilization of the process in "## ...

  6. Linux shell脚本基础学习详细介绍(完整版)一

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...

  7. Linux shell脚本基础学习详细介绍(完整版)

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...

  8. 第一章 Linux及Linux Shell简介

    1.1 关于Linux 1.1.1 什么是Linux Linux是自由开源的类Unix操作系统.该操作系统的内核是由莱纳斯·托瓦兹在1991年10月5日首次发布. 严格来讲,术语Linux只表示操作系 ...

  9. Linux Shell常用技巧(目录)

    Linux Shell常用技巧(一) http://liuxuyang.blog.51cto.com/2546552/1289413 一. 特殊文件: /dev/null和/dev/tty 二. 简单 ...

最新文章

  1. 在 AI Studio中利用Paddle实现经典的AlexNet
  2. 计算机技术+智能化水电站,水电工程BIM用太少?水电工程BIM案例全解读
  3. html显示php值,HTML窗体加载显示通过PHP的十六进制值
  4. Linux shell 脚本SDK 打包实践, 收集assets和apk, 上传FTP
  5. 阿里云数字政府市场份额第一,同比增速102.57%
  6. Angular启动过程介绍
  7. Qt|OpenGL对obj文件的认识以及如何去解析(opengl+qt构造地球模型)
  8. intelliJ IDEA快捷键整理自用版
  9. [No000057]一个人默默背单词,小心被传染哦
  10. 鼎力加密狗驱动程序_怎么安装加密狗驱动程序
  11. 微信发送文件卡死或黑屏
  12. Windows操作系统免费下载地址(itellyou)
  13. linux下网口监控软件_Linux网络监控工具大点兵
  14. 建筑灭火器配置设计规范
  15. 金仓数据库字段_金仓数据库认证工程师(KCE)考试试题_含答案_
  16. vc9.vc11.vc14_vc解释了为什么vc现在如此生气
  17. 重装系统后office去哪里安装?
  18. 什么是安全性测试(security testing)?
  19. 【单片机开发平台】msp430几种不同开发平台的对比
  20. AE(After Effect) 自带抠像插件详解

热门文章

  1. JAVA设计模式什么鬼(观察者)——作者:凸凹里歐
  2. Pro ASP.NET MVC 3 Framework 译文(一)
  3. html表格整体左移动,js操作table统制tr jquery 两个table左右移动
  4. 去王道论坛,趁热回忆2020考研专业课真题吧,一起攒人品!
  5. java:URLEncoder.encode只转码中文
  6. 将blackberry 9000当小猫连接PC上网
  7. ucenter base.php,phpcms整合ucenter问题集
  8. 雅虎黯然离场 但我们并没有因此怀念它
  9. 报错:NestedIOException: Failed to parse mapping resource
  10. 使用Nmap进行端口扫描和服务识别