Shell基础知识

一、本文的目标

    该文主要内容是整理自本人在这段时间学习Linux Shell脚本的学习笔记,主要涉及的内容是:对 Shell 的认识、基本的编程语法内容、正则表达式、Linux中精巧的过滤器swk和sed的使用简介,通过一些实例程序的编写分析来加强理解和记忆。目标是:方便以后自温习这部分的内容,也希望对和我一样的新手有所帮助。新手学习交流,能者多多指教。

二、关于 Shell

(1)Shell 是什么?

    我们通常所说的 Shell脚本编程指的是Linux下的“命令行式的Shell”,“Shell”英文解析是“壳、外壳”的意思,在计算机界是指和用户/使用者直接交互的软件,其实是把用户的“语言”解析成操作系统可以理解的“语言”,或者把操作系统的信息解析成用户可以理解信息。比如windows下的图形界面,叫GUI Shell,Linux下的命令行交互软件,即 Linux Shell,这也是本文要学习的对象。到此,对Shell有了个初步的概念,Shell是操作系统的一个外壳软件,他负责与用户直接交互。

(2)Shell 脚本在 Linux 中起什么作用?

    在很久很久以前,也不是很久^_^,那时Linux还没有桌面窗口,要使用 Linux 就需要往终端中一行一行地敲入指令来让Linux完成一些工作任务,因此也把这些操作Linux的指令叫做Shell指令,停,先补充一个概念,脚本:百度百科中解释是“一种特定的描述性语言,依据一定的格式编写的可执行文件”,这就好办了,如果我需要在Linux中完成一个任务,需要一连串的指令来完成,把这些一连串的指令按照“约定规则”写在一个文件中,赋予执行权限,哦,这文件就叫Shell脚本。方便性和代码的重用性可想而知。

   “约定的规则”即是说Shell脚本的语法规则,和其他编程语言一样有自己的一套语法,但是,Shell是一种解析型语言,不需要编译就可以运行,而C/C++需要经过编译才能运行目标文件。

(3)Linux Shell 的种类?

    Linux Shell的种类是指Shell解析器的种类,常见的有sh、bash、ksh、csh等等。sh是UNIX上最初的Shell,在每种UNIX系统中都可以使用,而bash是sh扩展版,通常是用在PC平台的Linux OS中,他比sh要强大得多,但是在嵌入式Linux OS中不支持,因此,如果编写的Shell脚本要在Embeded Linux OS中运行最好使用sh版本的Shell脚本。这两种脚本在Linux中是最常用的,其他的就不一一介绍了。

(4)学什么?要如何来学习 Shell 编程?

   主要学习 Shell 脚本语言的语法结构,比如:脚本的格式、变量定义和使用、一些约定的特殊符号、字符串的处理、分支结构、循环结构、正则表达式,还有一个前提就是熟悉Linux的常用的工具/指令(比如常见用的echo、find、grep、wc、swk、sed、ls、cat等等)。目前我是通过边熟悉基本语法、Linux指令,边编写Shell脚本来学习,学习了一个规则原理就编写一个对应的例子来验证,更好的办法还在摸索当中,不过我想再好的方法都离不开“知行合一”。 ^_^

三、初级入门笔记整理

(1)编写Shell脚本的格式

在第一行指定Shell脚本解析器:

#!/bin/bash 或:

#!/bin/sh 或其他,往后就可以开始编写Shell命令了。

(2)变量的定义和引用规则

Shell变量是一种弱类型的变量,即定义时无需声明变量的类型,默认一切皆“字符串”,在需要将其用作整数的时候,通过特殊的运算符即可完成,这点后边再分析。

①变量的定义规则:首个字符必须为字母,可以使用下划线,不可以使用其他标点符号,注意:“=”两边不能有空格!

myvalue="abcdefg"

一定需要双引号?当然不是。如果赋给变量的值是多个单词,即中间有空格隔开,就必须要使用双引号来表明他们是一个整体。

myvalue="hello world"

myvalue=hello_world

多个单词的时候使用单引号可不可以?完全可以,前提是,单引号里边字符全都当做普通字符,没有任何其他功能含义,稍后分析单引号和双引号在变量定义中使用的区别。

myvalue='hello world'

②变量的引用:$变量名

$myvalue

③Shell中变量的种类:

  • 用户自定义:像上边的 myvalue 变量。
  • 系统环境变量:像Linux系统中经常接触到的 PATH 变量,这类变量可以在命令行终端输入“env”指令来查看当前的系统环境变量有哪些变量值是多少。
  • 命令行变量:即在执行脚本的时候传进去的变量
    $* 和 $@ :表示所有的变量,以空格隔开。
    $n :n从1开始,表示传入的第几个参数变量。
    $# :参数的个数。
  • 特殊变量:
    $? :在使用该变量处的上一条命令执行的结果(返回值)。
    $$ :执行当前Shell脚本的进程号。

(3)Shell的特殊符号

  • 三种引号:下边所说的用法功能是指用在变量的定义赋值时。
    单引号:所包含的范围皆为字符串。
    例子:
    value1="hello"
    value2='$value1 world.`date`'
    echo $value2
    

     运行结果:$value1 world.`date`

    双引号:引号范围内可以引用变量,或执行命令。
    例子:
    value1="hello"
    value2='$value1 world.`date`'
    echo $value2
    
    运行结果:hello world.Thu Dec 10 07:33:07 CST 2015
    抑音符/重音符:Esc键下边的那个,用在双引号里边表示一个Shell命令。
  • 管道“|”:功能强大,用法多多。
    实现:将左边一条指令运行的结果作为右边指令的输入。
  • 重定向符“>”“<
    主要记住:标准的3个设备文件:“0”标准输入;“1”标准输出;“2”标准出错,在理解记忆下边这几个典型的例子:
    ls 1> my.txt               # ls 的内容就会全部写入到my.txt文件中
    ls hdhd.abc 1> my.txt      # ls 执行失败的信息就会全部写入到my.txt文件中
    注意:当标准设备文件放在重定向符
    右边时需要加“&”符号
    echo "hello" 1>&2   # 即把echo的标准输出重定向到他的标准出错。

(4)字符串处理

 

(5)分支结构

 

(6)循环结构

 

posted @ 2015-10-15 22:02  陈纽扣  阅读(368)  评论(0编辑  收藏  举报