一、关于shell的一些认识
1、shell语言,是一类编程语言。常用shell语言有sh、bash、csh、ksh、perl、python等。linux下最常用的脚本就是bash。
2、shell脚本,即把在命令行中输入的命令写成程序。这样可以避免反复地在命令行下手工输入命令的繁琐工作。
3、shell脚本是文本格式的,因此只要是文本编辑器都可以。Linux的换行符是'\n',windows的换行符是"\r\n",因此windows中的编辑器写的shell不能直接在linux下运行。
4、shell脚本不需要编译而直接运行。其运行机制是“解释运行”,即shell解析器会逐行解释shell程序代码,然后逐行运行。
5、执行shell的方式有三种。
- 第一种:./xx.sh。这种方式要求shell程序必须具有可执行权限。
- 第二种:source xx.sh。这种方式不要求脚本具有可执行权限。
- 第三种:bash xx.sh。bash是一个脚本程序解释器,本质上是一个可执行程序。
二、shell脚本的一些简单语法
1、shell脚本的开头语句#!/bin/sh
- 开头语句指定shell程序执行时被哪个解释器解释执行。
- 这里表示该shell程序被/bin目录下的sh可执行程序执行。
- 可以用#!/bin/bash来指定使用bash执行该脚本。
- ubuntu默认的解释器sh其实不是bash,而是dash。
2、shell脚本的注释
- shell脚本的注释使用#。
- 如果有多行需要注释,每行前面都要加#。
3、shell脚本的变量赋值与引用
- 变量赋值。使用=进行初始化赋值,=两边不能有空格。
- 变量引用。“$”是变量解引用符号。$符号后面跟着一个字符串,则将该字符串视为变量。如果该字符串没有定义,执行时并不会报错,而是把这个变量解析为空。即,在shell中没有被定义的变量其实就相当于是一个定义并赋值为空的变量。
- 注意,变量引用的时候可以$var,也可以${var}。但某些情况只能用${var}而不能用$var。
4、shell脚本中的单引号、双引号
(1)使用字符串时可以加双引号或者加单引号,但是不能输出"或者其他转义字符。
(2)单引号中是完全字面替换(不可包含单引号本身)。
(3)双引号中,$加变量名可以取变量的值,反引号仍表示命令替换。除下面情况外,在其它字符前面的\无特殊含义,只表示字面值。
\$表示$的字面值 输出$符号
\`表示`的字面值
\"表示"的字面值
\\表示\的字面值
5、shell脚本的选择分支结构(if)
6、shell脚本的循环结构
7、shell脚本的echo命令
- 使用echo指令新建一个文件,并且将一些内容传入这个文件中。
- 创建文件并输入内容的关键是>。
- 使用echo指令配合追加符号>>,向一个已经存在的文件末尾追加输入内容。
8、shell脚本中的case语句
- case默认只执行最先匹配上的那个case,不会再执行后面的其他case。
- 因此当while和case结合时,break是跳出外层循环而非case语句。
9、执行shell脚本时的传参
(1)执行shell脚本时,可以在执行时给该shell脚本传参。
- $#,表示执行该shell脚本时传参的个数(真正的参数个数)。
- $0、$1、$2·····则依次表示各个参数。
(2)对比
- C语言./a.out 11 22 33,则argc = 4,argv[0] =./a.out,argv[1]=‘11’。
- shell中:./a.out 11 22 33,则$#=3,$1='11'。