【1】Shell脚本
1》Shell脚本基础概念
1> 概念
Shell使用方式:手动在命令行下命令或用Shell脚本
Shell脚本本质:Shell命令的有序集合 扩展名最好以 .sh 结尾,见名知义 也可以没有
Shell既是应用程序,又是一种脚本语言
解释型语句:不需要编译,解释一句执行一句 Python、Shell脚本
编译型语句:需要编译器gcc、g++进行编译,比如C语言
2> Shell脚本的创建和执行
新建一个Shell脚本文件: touch xx.sh
在脚本文件里面第一行必须是 #!/bin/bash 意思是用/bin/bash来进行解释执行
执行方式:
1)先更改Shell脚本的执行权限 使其具有执行权限 chmod 权限 xx.sh
2)执行 :./xx.sh
2》变量
1> 用户自定义变量
变量一般用大写
赋值操作用 = ,但是 = 左右两边不能有空格
引用变量时要在变量前加 $
2> 位置变量
$0或 ${0}表示命令行的第一个参数,也就是脚本名的参数 ./xx.sh
$1、 $2....就是剩下的第二个、第三个命令行参数,以此类推
$# 表示所有命令行参数的个数(除了第一个命令行参数)
$@ 或 $* 表示所有命令行参数(除了第一个命令行参数)
3> 预定义变量
$? 表示前一条命令的退出状态 0为真 非0为假
$$ 表示正在执行的进程的进程号
4> 环境变量
环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,如临时文件夹位置、系统文件夹位置
例:
HOME:/etc/password 文件中列出的用户主目录
PATH:Shell搜索路径,就是一系列目录,当执行命令时,Linux就在这些目录下查找
3》功能语句
1> 说明性语句
以#开头是注释语句,起解释说明的作用
2> 功能性语句
read
功能:从标准输入读入一行数据,并赋值给后面的变量
格式:read 变量1 变量2 变量3
把读入行中的第一个数据赋值给变量1,第二个数据赋值给变量2 以此类推,当只剩最后一个变量但还有很多数据时,会把剩余数据都赋值给最后一个变量
read -p "提示语句" 变量列表 :可以将提示语句输出,同时输入变量
expr
格式: expr 表达式
注意:表达式符号之间必须用空格,元素要用$ 引用 可以直接输出结果,不过脚本里一般结合命令置换符把结果重新赋值给其他变量
算术运算符命令expr主要用于进行简单的整数运算,包括加(+)、减(-)、乘(\*)、整除(/)和取余数(%)等操作, 小括号前面也要加\。
test
可测试对象:字符串 整数 文件属性 每种测试对象都有若干测试操作符
字符串测试:
test s1 = s2 测试两个字符串的内容是否完全一样
test s1 != s2 测试两个字符串的内容是否有差异
test -z s1 测试 s1 字符串的长度是否为0
test -n s1 测试 s1 字符串的长度是否不为0
整数的测试:
test a -eq b 测试 a 与 b 是否相等 equal
test a -ne b 测试 a 与 b 是否不相等 not equal
test a -gt b 测试 a 是否大于 b greater than
test a -ge b 测试 a 是否大于等于 b greater equal
test a -lt b 测试a 是否小于b litter than
test a -le b 测试a 是否小于等于b litter equal
文件属性的测试:
test -d name 测试name 是否为一个目录
test -f name 测试name 是否为普通文件
test -e name 测试文件是否存在
3> 结构性语句
if语句
基本结构:
if 条件 then 命令表1 else 命令表2 fi
多路分支结构:
if 条件1 then 命令表1 elif 条件2 then 命令表2 fi
嵌套结构:
if 条件1 then if 条件2 then 命令表1 fi else 命令表2 fi
结合test判断
结合操作符[],但是[]前后都需要空格
case语句
格式:
case 变量 in 模式1) 命令表1 ;; 模式2) 命令表2 ;; *) 命令表n ;; esac
for循环语句
格式:
for 变量名 in 单词表 do 命令表 done
for语句的几种书写格式:
1)for i in 1 2 3 4 do....done : 变量i从单词表中取值
2)for i do...done: 变量i从命令行取值,可以省略in单词表
3)for i in {1..10} do...done: 变量i从1-10个数中取值
4)for ((i = 0; i < 10; i++)) do...done: 书写格式类似c语言
while循环语句
格式:
while 命令或表达式 do 命令表 done
循环控制语句
break n :结束 第 n 层循环 (从内层循环开始算第 1 层循环)
continue n :结束第 n 层的本次循环,继续下一次循环
补充操作符
-o 或运算 例如 [ $a -lt 20 -o $b -gt 100 ] 返回 true
-a 与运算 例如 [ $a -lt 20 -a $b -gt 100 ] 返回 false
! 非运算 例如 [ ! false ] 返回 true
&& 逻辑与 例如 [[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 逻辑或 例如 [[ $a -lt 100 || $b -gt 100 ]] 返回 true
| 位或 例如 echo $[2|2] &位与 例如 echo $[2&1]
4》数组
数组的赋值
1. arr = (1 2 3 4 5)
2. arr = ($1 $2 $3....)
3. read a b c
arr = ($a $b $c)
4. read -a arr
数组的调用
${arr[i]} #引用数组元素,数组元素下标从 0 开始到 n-1 结束 arr[i] = 10 #对数组元素重新赋值 ${arr[@]} #遍历数组 ${#arr[@]} #数组元素个数
5》函数
函数定义方式
函数名()
{
命令表
}
function 函数名()
{
命令表
}
函数调用
函数名 参数列表
函数内 $1 $2 表示的时传递给函数的参数