一、shell是操作系统提供的终端命令行,shell可以理解为软件系统提供给用户操作的命令行界面,是人机交互的一种方式。
二、shell是一类编程语言
(1)编写shell脚本时使用的语言就是shell语言,又叫脚本语言;
(2)shell脚本是一类语言而不是一种语言;
(3)常用shell语言:sh、bash、csh、ksh、perl、python等;
(4)Linux下常用的脚本语言就是bash、sh,脚本语言一般在嵌入式中主要用来做配置;
(5)perl、python这样的高级shell脚本语言,常用在网络管理配置等领域。
三、shell脚本语言的运行机制:解释运行
(1)C语言(C++)程序:编写出源代码,然后编译链接形成可执行二进制程序,然后才能运行;而脚本程序编写好后源代码即可直接运行(没有编译链接过程)。
(2)shell程序是解释运行的,执行一个shell程序时,shell解析器会逐行的解释程序代码,然后一行一行的运行(顺序结构)。
四、编辑器、执行方法
(1)shell程序是文本格式的,只要是文本编辑器都可以。但是shell还要在Linux系统下运行的,所以换行符必须是‘\n’,而windows下的换行符是”\r\n”,因此windows中的编辑器写的shell不能在Linux下运行。
(2)shell程序运行有多种方法,如:
第一种:./xxx.sh,和运行二进制可执行程序方法一样。这样运行shell要求shell程序必须具有可执行权限。chmod a+x xxx.sh来添加权限。
第二种:source xxx.sh,source是Linux的一个命令,这个命令就是用来执行脚本程序的。这样运行不需要脚本具有可执行权限。
第三种:bash xxx.sh,bash是一个脚本程序解释器,本质上是一个可执行程序。这样执行相当于执行了bash程序,然后把xxx.sh作为argv[1]传给它运行。
五、shell程序解释
(1)shell程序的第一行一般都是:#!/bin/sh 这行话以#!开始,后面加上一个pathname,这行话的意思就是指定shell程序执行时被哪个解释器解释执行。所以写上/bin/sh意思就是这个shell将来被当前机器中/bin目录下的sh可执行程序执行。也可以将第一行写为:#!/bin/bash来指定使用bash执行该脚本。
(2)脚本中的注释使用#,#开头的行是注释行。
(3)shell程序的正文,由很多行shell语句构成。shell就是把命令行中键入执行的命令写成了程序。
六、shell中的变量定义和引用
(1)变量定义时可以初始化,使用=进行初始化赋值。在shell中赋值的=两边是不能有空格的。
(2)变量赋值,变量定义后可以再次赋值,新的赋值会覆盖老的赋值。
(3)变量引用,shell中引用一个变量必须使用$符号,$符号就是变量解引用符号。
注:$符号后面跟一个字符串,这个字符串就会被当作变量去解析,如果这个字符串本身没有定义,执行时并不会报错,而是把这个变量解析为空。
注:变量引用的时候可以$var,也可以${var}。在某些情况下只能用${var}。
七、shell中无引号、单引号、双引号的区别
(1)shell中使用字符串可以不加双引号,直接使用。而且有空格时也可以,但是不能输出“或者其他转义字符。
(2)shell中也可以使用单引号来表示字符串,也是直接使用,不能输出转义字符。
(3)单引号中:完全字面替换(不可包含单引号本身)
(4)双引号中:
$加变量名可以取变量的值
反引号仍表示命令替换
\$表示$的字面值 输出$符号
\’表示’的字面值 输出’符号
\”表示”的字面值 输出“符号
\\表示\的字面值 输出\符号
八、shell中调用linux命令
(1)直接执行
(2)反引号(和~在一个按键上)括起来执行。有时候在shell中调用linux命令是为了得到这个命令的返回值(结果值),这时候就适合用一对反引号来调用执行命令。
九、shell中的选择分支结构
(1)典型if语句格式
if [ 表达式 ]; then
xxx
yyy
zzz
else
xxx
ddd
uuu
fi
(2)if的典型应用
判断文件是否存在。 (-f),注意[]里面前后都有空格,不能省略。
判断目录是否存在 (-d)
判断字符串是否相等 (”str1” = “str2”),注意用一个=而不是两个
判断数字是否相等(-eq)、大于(-gt)、小于(-lt)、大于等于(-ge)、小于等于(-le)
(equal、greater than、less than、greater or equal、less or equal)
判断字符串是否为空 (-z) 注意:-z判断时如果变量本身没定义也是不成立(没定义 不等于为空)
if判断式中使用”-o“表示逻辑或
十、echo的创建和追加输入文件
在shell中可以直接使用echo指令新建一个文件,并且将一些内容传入这个文件中。创建文件并输入内容的关键就是>。
可以使用echo指令配合追加符号>>向一个已经存在的文件末尾追加输入内容。