Steward_Xu

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  24 随笔 :: 1 文章 :: 10 评论 :: 25828 阅读

一、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输出的   值是多少呢?以下是测试情况。

    

复制代码
    
1 [root@ipv6-1-16 init.d]# ip=10.1.1.1
2 [root@ipv6-1-16 init.d]# ip=10.1.1.1-$ip
3 [root@ipv6-1-16 init.d]# echo $ip
4 10.1.1.1-10.1.1.1
View Code
复制代码

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

    

复制代码
    
1 [root@ipv6-1-16 init.d]# ip=10.1.1.1
2 [root@ipv6-1-16 init.d]# ip='10.1.1.1-$ip'
3 [root@ipv6-1-16 init.d]# echo $ip
4 10.1.1.1-$ip
View Code
复制代码

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

    

复制代码
    
1 [root@ipv6-1-16 init.d]# ip=10.1.1.1      
2 [root@ipv6-1-16 init.d]# ip="10.1.1.1-$ip"
3 [root@ipv6-1-16 init.d]# echo $ip         
4 10.1.1.1-10.1.1.1
View Code
复制代码

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

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

    使用反引号。

    

    
1 [root@ipv6-1-16 home]# cmd=`ls -l`
2 [root@ipv6-1-16 home]# echo $cmd  
3 total 8 drwx------. 5 tpl tpl 4096 Mar 16 02:34 tpl drwx------. 4 xguest xguest 4096 Jun 25 2015 xguest
View Code

   

三、特殊标量:

  

  具体测试:

  $0使用:

  

复制代码
  
1 [root@localhost ~]# cat /server/script/echo.sh 
2 #!/bin/sh
3 echo "hello!"
4 echo $0
5 [root@localhost ~]# sh /server/script/echo.sh    
6 hello!
7 /server/script/echo.sh
$0
复制代码

  $n使用:

  

复制代码
  
1 以下是部分脚本:
2 以上内容省略
3 echo $1
4 [root@ipv6-1-15 script]# sh tomcatd.sh  status
5 tomcat is running.                                         [  OK  ]
6 status
View Code
复制代码

   $*

  

复制代码
  
1 [root@localhost script]# cat for.sh 
2 for i in "$*";do echo $i;done
3 [root@localhost script]# sh for.sh  "you are" right
4 you are right
View Code
复制代码

 

   $#

  

复制代码
  
 1 #!/bin/sh
 2 . /etc/init.d/functions
 3 function status(){
 4         if [ `ps -ef |grep java |grep -v grep|wc -l` -gt 0  ]
 5           then
 6                  action "tomcat is running."  /bin/true
 7                 else
 8                         action "tomcat is stopped." /bin/false
 9                         exit 5
10         fi
11 }
12 case $1 in
13         status)
14         status
15 ;;
16 
17         *)
18         echo "USAG:start|stop|restart|status"
19 esac
20 echo $#
21 [root@ipv6-1-15 script]# sh $*.sh status
22 tomcat is running.                                         [  OK  ]
23 1          #表示一个参数
View Code
复制代码

  $@

  

复制代码
  
1 [root@localhost script]# cat for.sh                
2 for i in "$@";do echo $i;done
3 [root@localhost script]# sh for.sh  "you are" right
4 you are
5 right
View Code
复制代码

  $$

  

复制代码
  
1 [root@localhost script]# sh for.sh  "you are" right
2 you are
3 right
4 [root@localhost script]# echo $$
5 1561
View Code
复制代码

  $!

  

复制代码
  
1 [root@localhost script]# sh for.sh asfasdf &
2 [1] 1672
3 [root@localhost script]# asfasdf
4 
5 
6 [1]+  Done                    sh for.sh asfasdf
7 [root@localhost script]# echo $!            
8 1672
View Code
复制代码

  $?

  

复制代码
  
1 [root@localhost script]# echo "hello"
2 hello
3 [root@localhost script]# echo $?
4 0
View Code
复制代码

  $_

  

复制代码
  
1 [root@ipv6-1-15 script]# read a b c 
2 
3 [root@ipv6-1-15 script]# echo $_    
4 c
View Code
复制代码

 

 

  

 

posted on   Steward_Xu  阅读(518)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示