网站运营wordpress照片墙插件
一、shell脚本概述
1、shell脚本概念
Shell 脚本是利用 shell 的功能所写的一个程序。这个程序是使用纯文本文件,将一些 shell 的语法与命令(含外部命令)写在里面,搭配正则表达式、管道命令与数据流重定向等功能。
 
2、Shell 脚本编写步骤
 
第一个 Shell 脚本文件:
- 执行方式
 - bash test.sh
 - source test.sh
 - ./test.sh
 
二、shell脚本变量
1、变量介绍
- 变量来源于数学,是计算机语言中能储存计算结果或能表示值的抽象概念。
 - 变量可以通过变量名访问。在指令式语言中,变量通常是可变的
 
2、 变量的作用
用来存放系统和用户需要使用的特定参数(值):
- 变量名:使用固定的名称,由系统预设或用户定义
 - 变量值:能够根据用户设置、系统环境的变化而变化
 
3、变量的命名要求

4、变量的分类

5、用户自定义变量
在 shell 编程中通常使用全大写变量,方便识别
- $ COUNT=1
 
变量的调用:在变量前加 $
- $ echo $COUNT
 
Linux Shell/bash 从右向左赋值
- $Y=y
 - $ X=$Y
 - $ echo $X
 - y
 
使用 unset 命令删除变量的赋值
- $ Z=hello
 - $ echo $Z
 - hello
 - $ unset Z
 - $ echo $Z
 
6、 用户自定义变量
1)用户自定义变量 - 取值
- 双引号 : 允许通过 $ 符号引用其他变量值
 - 弱引用,其中的变量引用会被替换为变量值
 - 单引号 : 禁止引用其他变量值, $ 视为普通字符
 - 强引用,其中的变量引用不会被替换为变量值,而保持源字符串
 - 反撇号 : 命令替换,提取命令执行后的输出结果, `` 和 $(...) 作用相同
 
2)用户自定义变量 - 数组
- echo $a :默认显示数组 a 的第一个元素
 - echo ${a[0]} :显示数组中第一个元素,以此类推
 - echo ${a[-1]} : 显示数组中最后一个元素
 - echo ${a[*]} 和 echo ${a[@]} :显示数组中所有元素
 - echo ${#a[@]} :显示数组中元素的个数
 - echo ${a[@]: 起始元素 id: 元素个数 ]} :显示数组中以起始元素为首的指定个数的元素(注意:这里起始元素 id 不能为负值
 - unset a[n] 删除数组中的第 n 个元素
 - unset a 删除 a 这个数组
 
7、只读变量
- 变量值不允许修改(重新赋值)的情况
 - 无法使用 unset 删除
 - 最快方法重启
 - readonly
 
8、位置变量和预定义变量
- $0 与键入的命令行一样,包含脚本文件名
 - $1,$2,......$9 ${10} 分别包含第一个到第十个命令行参数
 - $# 包含命令行参数的个数
 - $@ 包含所有命令行参数:“ $1,$2,......$9”
 - $* 包含所有命令行参数,是一个整体:“ $1,$2,......$9”
 - $? 包含前一个命令的退出状态
 - $$ 包含正在执行进程的 ID 号
 
9、环境变量
常用环境变量
- $USER 表示用户名称
 - $HOME 表示用户的宿主目录
 - $LANG 表示语言和字符集
 - $PWD 表示当前所在工作目录
 - $PATH 表示可执行用户程序的默认路径
 - export 可以将变量指定为全局变量
 
三、shell语句
1、shell程序
Shell 程序由零或多条 shell 语句构成。 shell 语句包括三类 :
- 说明性语句
 - 功能性语句
 - 结构性语句
 
2、说明性语句(注释行)
以 # 号开始到该行结束,不被解释执行
注释行可以出现在程序中的任何位置 , 既可以单独占用一行 , 也可以接在执行语句的后面 . 以 # 号开始到所在行的行尾部分,都不被解释执行 .
例如 :
#! /bin/sh
#
# 本程序说明
#
command_1
command_2 # command_2 的语句说明
......
# 下面程序段的说明
command_m
......
command_n # command_n 语句的说明
...... 
3、功能性语句(命令)
1)命令 -read
read 从标准输入读入一行 , 并赋值给后面的变量 , 其语法为 :
read var 
把读入的数据全部赋给 var
read var1 var2 var3 
- 把读入行中的第一个单词 (word) 赋给 var1, 第二个单词赋给 var2 , ......把其余所有的词赋给最后一个变量 .
 - 如果执行 read 语句时标准输入无数据 , 则程序在此停留等侯 , 直到数据的到来或被终止运行。
 
2)算术运算命令 -expr
算术运算命令 expr 主要用于进行简单的整数运算,包括加 (+) 、减( - )、乘( \*) 、整除
( / )和求模( % )等操作。例如 :
$ expr 12 + 5 \* 3
27
$ expr 3 - 8 / 2
-1
$ num=9
$ sum=`expr $num \* 6 `
$ echo $sum
54 
3)命令 -test
- test 语句可测试三种对象 :
 - 字符串 整数 文件属性
 - 每种测试对象都有若干测试操作符
 
4)字符串测试
- s1 = s2 测试两个字符串的内容是否完全一样
 - s1 != s2 测试两个字符串的内容是否有差异
 - -z s1 测试 s1 字符串的长度是否为 0
 - -n s1 测试 s1 字符串的长度是否不为 0
 
5)整数测试
- a -eq b 测试 a 与 b 是否相等
 - a -ne b 测试 a 与 b 是否不相等
 - a -gt b 测试 a 是否大于 b
 - a -ge b 测试 a 是否大于等于 b
 - a -lt b 测试 a 是否小于 b
 - a -le b 测试 a 是否小于等于 b
 
6)文件测试
- -e name 测试一个文件是否存在
 - -d name 测试 name 是否为一个目录
 - -f name 测试 name 是否为普通文件
 - -L name 测试 name 是否为符号链接
 - -r name 测试 name 文件是否存在且为可读
 - -w name 测试 name 文件是否存在且为可写
 - -x name 测试 name 文件是否存在且为可执行
 - -s name 测试 name 文件是否存在且其长度不为 0
 - f1 -nt f2 测试文件 f1 是否比文件 f2 更新
 - f1 -ot f2 测试文件 f1 是否比文件 f2 更旧
 
4、结构性语句
结构性语句主要根据程序的运行状态、输入数据、变量的取值、控制信号以及运行时间等因素来控制程序的运行流程。
主要包括:
- 条件测试语句(两路分支)
 - 多路分支语句
 - 循环语句
 - 循环控制语句等
 
