Shell脚本编程
shell脚本编程:是基于过程式、解释执行的语言
格式: (1)#!/bin/bash 机制
(2) 添加执行权限
(3) bash 运行
脚本调试与安全:
./ 执行脚本
bash 执行脚本
bash -n 查看是否语法错误
bash -x 脚本试执行
set -u 存在没有定义的变量提示错误信息
set paste 保留格式
变量控制符:
'' 单引号,防止所有扩展
\ 斜杠,转义字符本身
"" 双引号,允许变量扩展
`` 反引号,允许所有扩展
普通变量:
赋值: name=...
引用: $name
删除: unset name
查看: set
$RANDOM随机数生成
环境变量:
赋值: declare -x name=...
引用: $name
删除: unset name
查看: declare -x
退出状态码变量:
echo $? 返回0即上一条命令成功,否则失败
函数:
赋值: name{} ( “命令” )
引用: name
删除: unset name
查看: declare -f
函数存与文件中,函数需先生效再执行,source file
数组:
多个变量的集合,分为普通数组和关联数组
赋值: name=(1 3 5 7) 默认下标从0开始
引用: ${name[*]} *所有元素 0下标为0的元素
删除: unset name
删除单元素: unset name[0]
查看: declare -a
echo ${name[*]} 查看name数组所有元素
echo ${#name[*]} 查看name数组所有元素个数
算数运算:
+加 —减 *乘 %取余
let f=$y%2
let y++即 y=y+1 y+=u即 y=y+u
逻辑运算:
与& 或| 非!
短路与 1 && 2 即1成功执行2,失败则不执行
短路或 1 || 2 即1失败执行2,成功则不执行
条件判断:
[ ] 条件判断
[[ == ]] 通配符模式
[[ =~ ]] 正则表达式
字符串判断:
=等于 !=不等于 >大于 <小于
-v 变量是否被赋值
-z 为空
-n 不为空
数值测试:
-gt大于 -lt小于
-eq等于 -ne不等于
文件测试:
-a存在 -b块设备文件 -c字符设备文件
-s套接字文件 -f普通文件 -d目录文件
-h链接文件 -p管道文件
-r可读 -w可写 -x可执行
组合条件测试:
-a并且 -o或者 !取反
if条件判断
if 1条件;then 满足1条件执行1命令
“1命令”
elif 2条件; then 满足2条件执行2命令
“2命令”
else 都不满足执行3命令
“3命令”
fi
case条件判断 配合read -p 提示输入使用
read -p “数字” shu
case $shu in
1)
“命令” ;;
2)
“命令” ;;
*)
“命令” ;;
case
for循环
格式1:for y in {1..9}; do
done
格式2:for ((i=1;i<10;i++));do
done
while循环
while “条件” ;do 条件为真循环
done
无限循环:true永远返回真
特殊用法:while read line ;do 依次读取文件行进行处理
done </etc/passwd
while read c d ;do 为两个变量赋值需要两个参数
done
while read -p “请输入数字” y ;do 提示输入,单参数循环
done
循环控制:
sleep 1 停留1秒 m分 h小时
continue 提前结束本轮循环
break 结束整个循环
shift 依次循环处理
字符串处理:
n=weroidasfnzxc
${#n} 返回字符串长度
${n:2:5} 跳过字符串前2个取后面3个
f="var/log/messages"
${f#*/}: log/messages 去除第一个/之前的内容
${f##*/}: messages 去除所有/之前的内容