一、shell脚本建立:

  shell脚本通常是在编辑器(如vi/vim)中编写,也可以在命令行中直接执行;

  1、脚本开头:

      规范的脚本第一行需要指出有哪个程序(解释器)来执行脚本中的内容,在Linux中一般为:

    #!/bin/sh

    或者

    #!/bin/bash

   “#!”,在执行脚本时,内核会根据“#!/bin/sh”来确定使用bash程序来解释脚本,这行必须在脚本顶端(第一行),如果非第一行则表示注释。

   如果不是使用“#!/bin/sh”而是使用其他的例如:“# !/usr/bin/env python” 则表示使用python来解释程序。

  2、脚本注释:

     在shell中常常会有解释说明脚本所需要实现的功能,或者其他信息,那么久需要对脚     本进行注释说明:如何注释说明呢?

        在注释的内容前面增加“#”则可以表示后面内容为注释。如果没有注释,非脚本开发人     员很难理解脚本的实现功能,而且时间长了即使是脚本开发则也可能忘记脚本所实现的功    能。因此良好的习惯在于书写注释,方便别人也方便自己。   

二、变量:

  在所有编程中都会涉及到变量。那么在shell中如何定义是使用变量呢?

  1、直接定义变量内容:

    例、ip=10.1.1.1

      ip=10.1.1.1-$ip

    这种情况下,变量的内容一般为简单的连续的数字,字符串,路径名。那么这个ip输出的   值是多少呢?以下是测试情况。

    

    

 [root@ipv6-- init.d]# ip=10.1.1.1
[root@ipv6-- init.d]# ip=10.1.1.1-$ip
[root@ipv6-- init.d]# echo $ip
10.1.1.1-10.1.1.1

  2、通过单引号来定义变量,此种方式特点是:输出变量是单引号中是什么就输出什么,即使  引号中的内容有变量也会直接把变量原样输出。此法为定义纯字符串变量。

    

    

 [root@ipv6-- init.d]# ip=10.1.1.1
[root@ipv6-- init.d]# ip='10.1.1.1-$ip'
[root@ipv6-- init.d]# echo $ip
10.1.1.1-$ip

  3、双引号定义变量,此种方法特点:输出变量是引号内有变量会经过解析后输出变量内容,  而不是原样输出。此法实用于字符串中附带有变量内容的定义。

    

    

 [root@ipv6-- init.d]# ip=10.1.1.1
[root@ipv6-- init.d]# ip="10.1.1.1-$ip"
[root@ipv6-- init.d]# echo $ip
10.1.1.1-10.1.1.1

  由上可以看出,无引号和双引号实现的功能基本类似,实现功能所差无几,但是实际中最好使用双引号来对含有变量变量的进行定义。

  4、常用的把一个命令作为变量:

    使用反引号。

    

    

 [root@ipv6-- home]# cmd=`ls -l`
[root@ipv6-- home]# echo $cmd
total drwx------. tpl tpl Mar : tpl drwx------. xguest xguest Jun xguest

   

三、特殊标量:

  

  具体测试:

  $0使用:

  

  

 [root@localhost ~]# cat /server/script/echo.sh
#!/bin/sh
echo "hello!"
echo $
[root@localhost ~]# sh /server/script/echo.sh
hello!
/server/script/echo.sh

$0

  $n使用:

  

  

 以下是部分脚本:
以上内容省略
echo $
[root@ipv6-- script]# sh tomcatd.sh status
tomcat is running. [ OK ]
status

  $*

  

  

 [root@localhost script]# cat for.sh
for i in "$*";do echo $i;done
[root@localhost script]# sh for.sh "you are" right
you are right

   $#

  

  

 #!/bin/sh
. /etc/init.d/functions
function status(){
if [ `ps -ef |grep java |grep -v grep|wc -l` -gt ]
then
action "tomcat is running." /bin/true
else
action "tomcat is stopped." /bin/false
exit
fi
}
case $ in
status)
status
;; *)
echo "USAG:start|stop|restart|status"
esac
echo $#
[root@ipv6-- script]# sh $*.sh status
tomcat is running. [ OK ]
#表示一个参数

  $@

  

  

 [root@localhost script]# cat for.sh
for i in "$@";do echo $i;done
[root@localhost script]# sh for.sh "you are" right
you are
right

  $$

  

  

 [root@localhost script]# sh for.sh  "you are" right
you are
right
[root@localhost script]# echo $$

  $!

  

  

 [root@localhost script]# sh for.sh asfasdf &
[]
[root@localhost script]# asfasdf []+ Done sh for.sh asfasdf
[root@localhost script]# echo $!

  $?

  

  

 [root@localhost script]# echo "hello"
hello
[root@localhost script]# echo $?

  $_

  

  

 [root@ipv6-- script]# read a b c 

 [root@ipv6-- script]# echo $_
c

  

随机推荐

  1. 测试工程师面试题之:给你印象最深的Bug

    有人看到别人在侵淫面试技巧,什么<程序员面试宝典>,或者<面试测试工程师须知>等等,就会嗤之以鼻.他会觉得这不是“投机取巧”吗,最重要的还是踏实提高自己的能力. 非常同意这种看 ...

  2. Session移除

    Session.Clear()就是把Session对象中的所有项目都删除了,Session对象里面啥都没有.但是Session对象还保留. Session.Abandon()就是把当前Session对 ...

  3. [AH2017/HNOI2017]抛硬币

    传送门 这个题的暴力比较好想--然后用一些组合的知识就可以变成正解了. 首先我们考虑a=b的情况.我们把扔出来的硬币看成是一个01序列,那么对于一个b获胜的序列,他在每一位都按位异或1之后必然是一个a ...

  4. bzoj 1096 仓库建设 —— 斜率优化DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1096 设 f[i] 为 i 作为最后一个仓库时前 i 个工厂的答案,最后的答案当然是 f[n ...

  5. SQL Server中查询CPU占用高的SQL语句

    SQL Server中查询CPU占用高的情况,会用到sys.sysprocesses ,dm_exec_sessions ,dm_exec_requests 一.查看当前的数据库用户连接有多少 USE ...

  6. EF之贪婪加载和延迟加载

    这篇文章将讨论查询结果的控制 在使用EF(Entity Framework)的过程中,很多时候我们会进行查询的操作,因此知道哪些数据会被加载到内存当中就至关重要.在多多的情况下,你可能并并不需要加载全 ...

  7. myeclipse 重新关联项目和svn

    有时候重装了svn或重新定义了WorkSpaces,原项目和svn没关联了 那么 右击要提交的项目 在弹出的菜单依次:Team -->share project 在弹出的对话框里填入SVN的地址 ...

  8. SQL Server知识详解

    1.SET NOCOUNT ON的作用: 作用:阻止在结果集中返回显示受T-SQL语句或则usp影响的行计数信息. 语法:SET NOCOUNT {ON | OFF} 详解:当SET ONCOUNT ...

  9. react中虚拟DOM的基本概念

    react中的核心概念 1.DOM的本质是什么: 浏览器中的概念,用js对象来表示页面上的元素,并提供操作DOM对象的API 2.什么事react中的虚拟DOM:是框架中的概念,是程序员用js对象来模 ...

  10. vue仿淘宝地址选择组件

    Vue组件:省市区地址选择组件 <template> <div v-show="addressSelectShow" :style="{'left': ...