shell的作用
- shell是用户和系统内核之间的接口程序
- shell是命令解释器
shell程序
Shell程序的特点及用途:
-
shell程序可以认为是将shell命令按照控制结构组织到一个文本文件中,批量的交给shell去执行
-
不同的shell解释器使用不同的shell命令语法
-
shell程序解释执行,不生成可以执行的二进制文件
-
可以帮助用户完成特定的任务,提高使用、维护系统的效率
-
Shell使用解释型语言,不需重新编译
-
它适合于编写执行相对简单的任务的工具,因为它更强调易于配置、维护和可移植性
-
它不适合用来完成时间紧迫型和处理器忙碌型的任务
变量
变量是弱类型的
- 声明变量不用声明类型
- 可以存储不同类型的内容
- 大小写区分
变量声明及赋值格式
格式:变量=值 (注意:等号两侧不能有空格)
例如:
- a=”hello world”
- a=hello world
- b=9
变量的引用
格式:
- $变量名
- ${变量名}
变量名为一个字符用方式1,变量名多于一个字符建议用方式2
例子:
- a=1
- abc=“hello”
- echo $a
- echo ${abc}
- 如果字符串里包含空格,就必须用引号把它们括起来
- 等号两边不能有空格!!!
- 默认情况下,所有输入的内容都是字符串
单引号,双引号,倒引号
-
倒引号括起来的字符串被shell解释为命令行,在执行时shell会先执行该命令行,并以它的标准输出结果取代整个倒引号部分
-
由单引号括起来的字符都作为普通字符出现
-
如果在参数中包含一个或多个空白字符,必须给参数加双引号。如果把一个带有$字符的变量放在双引号中,程序执行到该行时会把变量替换为它的值.
可用\字符取消$ 的特殊含义 \ $
位置变量
bash在解释用户命令时,会把所输入的命令后面的参数使用位置变量传递给bash脚本程序
$1、$2…$n分别代表参数1、参数2…参数n
$0则代表脚本的名字
有关位置变量还有另外三个。
- $*:这个变量包括参数的列表(字符串)。
- $@:这个变量包括参数的列表(数组)。
- $#:这个变量包括参数的个数。
环境变量
Shell运行时自动设置的一些变量称为环境变量,由Shell维护和管理。
只在shell程序中可用的变量
数学表达式
条件判断
常见的条件:
- 变量属性;
- 文件属性;
- 命令执行结果;
- 多种条件的逻辑组合;
判断结果的一般定义: - 真:0
- 假:1
格式: - test condition
- [ condition ] #[右边和]左边需要有空格
控制结构
常见分支结构:
- if
#!/bin/bash
echo -n "Please input a directory:”
read dir
if cd ${dir} > /dev/null 2>&1;then
echo "enter directory $dir successed”
else
echo "enter directory $dir failed”
fi
Linux系统里执行的每一个程序都有标准输入/标准输出/错误输出三个通道。
Linux所有的设备都是以文件的形式出现,因此,这里提到的三个通道,实际上就是三个文件。
- 文件描述符 0 : 标准输入
- 文件描述符 1 : 标准输出
- 文件描述符 2 : 错误输出
find / -name "cd" 1> stdout.txt 2> errout.txt
&:取地址
> /dev/null 等价于1>/dev/null把标准输出的内容输出到垃圾箱
2 > &1 把错误输出的内容输出到标准输出的地址
- case
模式的匹配可以使用通配符 - ?:仅匹配一个字符
- *:匹配任意字符
- […]:配置方括号中的任意一个字符
- [!..] : 不匹配方括号中的任意字符
- [a-zA-Z] : -指定一个取值范围
常见循环结构:
- for
#!/bin/bash
echo "Input a directory:”
read dir
for file in `ls $dir`
do
echo $file
done
- while
- until