欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

shell之入门篇 博客分类: shell 脚本bashlinuxunix 

程序员文章站 2024-02-20 13:25:34
...
Shell 是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Ken Thompson的sh是第一种Unix Shell,Windows Explorer是一个典型的图形界面Shell。
Shell 脚本
Shell 脚本(shell script),是一种为shell编写的脚本程序。
业界所说的shell通常都是指shell脚本,但读者朋友要知道,shell和shell script是两个不同的概念。
由于习惯的原因,简洁起见,本文出现的"shell编程"都是指shell脚本编程,不是指开发shell自身。
Shell 环境
Shell 编程跟java、php编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
Linux的Shell种类众多,常见的有:
Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh)
……
较常用 Bourne Again Shell,由于易用和免费,Bash在日常工作中被广泛使用。同时,Bash也是大多数Linux系统默认的Shell。


语法:
  
  shell中的注释
  
    # 类似于java中的//注释,shell中没有多行注释

   echo "学习"   -->会打印出"学习"  

   变量申明  name="张珊" 
   注:变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量        名的命名须遵循如下规则:
      首个字符必须为字母(a-z,A-Z)。
      中间不能有空格,可以使用下划线(_)。
      不能使用标点符号。
      不能使用bash里的关键字(可用help命令查看保留关键字)。
  
    使用变量:例如输出name   echo $(name)或 echo $name
   
    已定义的变量,可以被重新定义例如:name="张珊" name="李四" 那么echo $name将会输出"李四"
    
     只读变量,例如设置name为只读变量
            name="张珊"
            readonly name
            name="李四"
      那么再去修改name为李四时运行会提示: name: readonly variable
     
     删除变量
       把刚才的name变量删除:unset name 然后再echo name 则不会输出任何信息

      变量类型
        运行shell时,会同时存在三种变量:
             1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他         shell启动的程序不能访问局部变量。
             2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
             3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
      
      Shell 字符串
         在shell中可用''或者""或者不用单/双引号声明字符串
            最好用双引号:
              双引号里可以有变量
              双引号里可以出现转义字符

      拼接字符串
           name="张珊"
           allname="你认识$name吗"
           echo $allname
           输出为:你认识张珊吗?

       获取字符串长度
           name="张珊"
           echo ${#name}
           输出:6
        字符串截取
           name="ILOVEYOU"
           res=${name:1:4} //截取name的第 2 个字符开始截取 4 个字符赋给变量res
           echo $res
           输出:LOVE
        查找某个字符串的位置类似于java中的indexOf()
           name="ILOVEYOU"
           echo `expr index "$name" V`
           输出:4  注:脚本中 "`" 是反引号,而不是单引号 "'",不要看错了,有点儿坑!
        Shell中的数组
           bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0
           在Shell中,用括号来表示数组数组元素用"空格"符号分割开。定义数组的一般  形式为:   names=(zhangshan lishi wangwu zhaoyun)
        单独定义数组的各个分量

           例如:names[0]=chian
                names[1]=usa
                  .
                  .
                names[n]=xxx
             注:可以不使用连续的下标,而且下标的范围没有限制
         读取数组
                读取数组元素值的一般格式是:
                ${数组名[下标]}
                例:${names[0]}
                names=(zhangshan lishi)
                echo ${names[1]}  #输出为:lishi

                用@符号可以获取数组中的所有元素
                echo ${names[@]}   #输出为:zhangshan lishi
         获取数组的长度
            取得数组元素的个数
             length=${#array_name[@]}
            或者
           
 length=${#array_name[*]}

            取得数组单个元素的长度
              lengthn=${#array_name[n]}
             例子:
                 names=(zhangshan lishi)
               length=${#names[@]}  #此处或者写为
length=${#names[*]}

                 echo $length     #输出2