南宁市网站开发建设,无锡开发网站建设,品牌策划方案书,广州化妆品网站建设公司排名1 Shell脚本概述
1.1Shell脚本概述 Shell脚本是利用 shell 的功能所写的一个程序。这个程序是使用纯文本文件#xff0c;将一些 shell 的语法与命令#xff08;含外部命令#xff09;写在里面#xff0c;搭配正则表达式、管道命令与数据流重定向等功能 1.2Shell脚本编写流…1 Shell脚本概述
1.1Shell脚本概述 Shell脚本是利用 shell 的功能所写的一个程序。这个程序是使用纯文本文件将一些 shell 的语法与命令含外部命令写在里面搭配正则表达式、管道命令与数据流重定向等功能 1.2Shell脚本编写流程 第一个Shell脚本文件
#!/bin/bashecho hello world
执行方式bash test.shsource test.sh./test.sh2 Shell脚本变量
2.1变量介绍
变量来源于数学是计算机语言中能储存计算结果或能表示值的抽象概念。
变量可以通过变量名访问。在指令式语言中变量通常是可变的
2.2变量的作用
用来存放系统和用户需要使用的特定参数值
变量名使用固定的名称由系统预设或用户定义
变量值能够根据用户设置、系统环境的变化而变化
2.3变量的命名要求 2.4变量的分类 2.4.1 用户自定义变量
变量可以再终端中使用也可以代码中使用
在shell编程中通常使用全大写变量方便识别
$ COUNT1
变量的调用在变量前加$
$ echo $COUNTLinux Shell/bash从右向左赋值
$Yy
$ X$Y
$ echo $X
y 使用unset命令删除变量的赋值
$ Zhello
$ echo $Z
hello
$ unset Z
$ echo $Z
取值
双引号: 允许通过$符号引用其他变量值不加引号也一样echo $COUNT echo $COUNT 弱引用其中的变量引用会被替换为变量值
单引号: 禁止引用其他变量值$视为普通字符 强引用其中的变量引用不会被替换为变量值而保持源字符串
反撇号: 命令替换提取命令执行后的输出结果和$(…)作用相同 数组
#array数组
a(1 2 3 4 5)
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这个数组2.4.2 只读变量
变量值不允许修改重新赋值的情况
无法使用 unset删除
最快方法重启
readonly
readonly COUNT32.4.3 位置变量和预定义变量 $0 与键入的命令行一样包含脚本文件名
$1,$2,……$9 ${10} 分别包含第一个到第十个命令行参数
$# 包含命令行参数的个数
$ 包含所有命令行参数“$1,$2,……$9”
$* 包含所有命令行参数是一个整体“$1,$2,……$9”
$? 包含前一个命令的退出状态
$$ 包含正在执行进程的ID号示例
#!/bin/bash
echo $0
echo $1
echo $2
echo $3
echo $#
执行
./test.sh 1 2 3 4 5
输出
./test.sh
1
2
3
5 //一共传入了5个 2.4.4 环境变量
$USER 表示用户名称
$HOME 表示用户的宿主目录
$LANG 表示语言和字符集
$PWD 表示当前所在工作目录
$PATH 表示可执行用户程序的默认路径
export可以将变量指定为全局变量示例 3 Shell语句
3.1 Shell程序
Shell 程序由零或多条shell语句构成。 shell语句包括三类:
说明性语句 功能性语句 结构性语句。
3.2 说明性语句
说明性语句(注释行)
以#号开始到该行结束不被解释执行 注释行可以出现在程序中的任何位置,既可以单独占用一行, 也可以接在执行语句的后面. 以#号开始到所在行的行尾部分都不被解释执行. 例如:
#! /bin/sh
#
# 本程序说明
#
command_1
command_2 # command_2的语句说明
……
# 下面程序段的说明
command_m
……
command_n # command_n语句的说明
……3.3 功能性语句
read从标准输入读入一行, 并赋值给后面的变量,其语法为:
read var // 把读入的数据全部赋给var示例 把读入行中的第一个单词(word)赋给var1, 第二个单词赋给var2 ……把其余所有的词赋给最后一个变量. 如果执行read语句时标准输入无数据, 则程序在此停留等侯, 直到数据的到来或被终止运行。 -t 跟随等待事件 -p 跟随终端的提示信息 -s输入不回显
示例 算术运算命令expr主要用于进行简单的整数运算包括加()、减-、乘\*)、整除/和求模%等操作。例如:$ expr 12 5 \* 327$ expr 3 - 8 / 2-1$ num9$ sumexpr $num \* 6 $ echo $sum54示例 这里前后需要空格
test语句可测试三种对象: 字符串 整数 文件属性
条件成立输出0 条件不成立输出1
每种测试对象都有若干测试操作符
字符串测试
s1 s2 测试两个字符串的内容是否完全一样
s1 ! s2 测试两个字符串的内容是否有差异
-z s1 测试s1 字符串的长度是否为0
-n s1 测试s1 字符串的长度是否不为0示例 注意 加上双引号减少错误否则会显示0 整数测试
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
示例 文件测试
-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 更旧示例 3.4 结构性语句
结构性语句主要根据程序的运行状态、输入数据、变量的取值、控制信号以及运行时间等因素来控制程序的运行流程。 主要包括
条件测试语句两路分支
多路分支语句
循环语句
循环控制语句等