Fork me on GitHub

Shell脚本学习(1)

一.shell简介

shell是一个用C语言编写的程序,它是用户使用linux的桥梁。
shell既是一种命令语言,又是一种脚本语言

  1. 脚本语言是相对编译型语言(例如C\C++、Java、C#等)而言的,它是为了缩短编译型语言编写、编译、链接、运行过程而创建的计算机编程语言。        
  2. 脚本语言常常运行于底层,所处理的是字节、整数、浮点数或其他机器层的对象,是低级程序设计语言,它往往是解释运行而非编译,即由解释器读入脚本程序代码,将其转换成内部的形式执行,而解释器本身则是编译型程序。
  3. 脚本语言的好处是简单、易学,适合处理文件和目录之类的对象,以简单的方式快速完成某些复杂的事情。脚本的灵活性是以执行效率为代价,它的执行效率通常不如编译型语言,因此不适用于大型的项目、计算复杂的工程或有高级需求的应用软件,而适用于系统管理、文本处理等方面完成特定的功能的常用的小工具或小程序。

 

   shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

  shell脚本接收用户输入的命令,并把它送入内核去执行。内核是Linux系统的心脏,从开机自检时就驻留在计算机的内存中,直到计算机关闭为止,而用户的应用程序存储在计算机的硬盘上,仅当需要时才被调入内存。当用户登录Linux系统时,shell会被调入内存执行。shell独立于内核,它是连接内核和应用程序的桥梁,并由输入设备读取命令,再将其转为计算机可以理解的机械码,Linux内核才能执行该命令。如下图:

一般情况下,shell脚本默认文件扩展名为.sh,shell脚本运行的方法:作为可执行程序或作为解释器参数。

二.初识shell

   作为刚刚进入shell世界的我们来说,学习shell简单的例子,会加深我们理解shell的工作原理。

1 !/bin/bash
2 echo "hello world!"  #打印hello world!

  如上shell脚本的简单的Demo,实现的功能是打印“hello world!”。其中,“#!”符号是Shell脚本的起始符号,也是指定一个文件类型的特殊标记,告诉Linux系统这个文件的执行需要指定一个解释器。“#!”符号后是指明解释器在系统中的路径名(即位置)。第2行命令中的echo命令用于向窗口输出文本,即“hello world!”。此行中的“#”符号是注释符,它后面直到本行结束的所有内容是注释,脚本执行时是不会执行的。最后,在编写脚本时,注意养成好习惯,可以在脚本的前面添加相应的注释,增加shell脚本的可读性,便于人们理解该脚本。

  对于一般的shell脚本而言,解释器是bashsh

#!/bin/bash
#/bin/sh

 三.shell 变量

  定义变量时,变量名不加美元符号,即变量名=初始值。

1 var="variable_NAME"

   定义变量时,变量名和等号之间不能有空格,同时,变量名的命名必须遵循如下规则:

    1)命名只能使用英文字母、数字和下划线,首个字符不能以数字开头。

    2)中间不能有空格,可以使用下划线。

    3)不能使用标点符号。

    4)不能使用bash里的关键字。

  使用一个定义过的变量,只要在变量名前面加美元符号即可。

1 name="lwei2"
2 echo $name   #2行的效果与3行效果一样 
3 echo ${name} #花括号是为了帮助识别变量边界

  使用变量的一般格式: ${variable_name}。其中,花括号是可选的,是为了帮助解释器识别变量的边界。

  使用readonly命令可以将变量定义为只读变量,只读变量的值不能被改变。

1 #!/bin/bash
2 Company="HuaWei"
3 readonly Company
4 Company="Google"

   如上Demo,运行后结果报错,提示如下:

./demo.sh: line 4: Company: readonly variable

   只读变量定义的格式为:readonly variable_name

  使用unset命名可以删除变量,格式:unset variable_name

1 #!/bin/sh
2 Addr="china"
3 unset Addr
4 echo ${Addr}

   Shell变量分为局部变量、环境变量、shell变量。

  局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。

  环境变量时所有的程序,包括shell启动的程序,都能访问环境变量。有些程序需要环境变量来保证其正常运行。必要时shell脚本也可以定义环境变量。

  Shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证shell的正常进行。

  字符串是shell编程中最常见且有用的数据类型。字符串可以用单引号或双引号或不用引号。

  单引号字符串的限制:单引号里的每个字符都会原样输出,单引号字符串中的变量时无效的。单引号字符串中不能单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

1 str='this is a string'

   双引号字符串里可以有变量,可以出现转义字符。

1 name='lwei2'
2 str="Hello, I know the boy who are \"$name\"! \n"
3 echo -e ${str}  

  获取字符串长度: ${#variable_name}

1 string="abcde"
2 echo ${#string} #输出 5

  提取子字符串:${variable_name:i:n},其中i=1,n>=i>=0且 n <=字符串长度。

1 string="china is a great country."
2 echo ${string:1:2} # 输出 hina

  查找子字符串:`expr index “$variable_name” 子串`

1 string="lwei2 is a work"
2 echo `expr index "$string" e`  # 输出 3

四.小总结

  通过认识shell脚本的作用和工作原理,加上简单的例子,可以加深我们理解shell脚本语言。因此,想要熟练掌握shell脚本,除了认识和了解shell脚本的一些基本语法,加上多实践,多练习,方能熟能生巧。

posted @ 2019-02-01 23:59  lwei2  阅读(159)  评论(0编辑  收藏  举报