解析器
脚本第一行 以 #!bin/bash 开始 指定解析器未bash
执行方式:
1、bash(或sh)+路径 不赋予可执行权限
2、更改文件的执行权限,直接路径执行 chmod+x 文件名
3、source或. +文件名 source 在本shell内执行 环境变量生效问题和继承关系
变量
环境变量
系统变量
用户变量
全局变量:对子shell也有效
局部变量:只对当前bash有效
env 看全部的变量 printenv 变量名 打印指定变量
环境变量 带$符号 大写
set 看当前定义的全部变量
自定义变量:变量名=变量值 =号前后无空格 撤销变量 unset 变量名
声明静态变量 readonly 变量名 不能unset
自定义变量为局部变量 export 提升/导出为全局变量
子shell中更改不影响父shell,父shell中声明全局变量子shell可以继承
所有变量都是字符串 变量由空格需要用引号
运算符为双括号 a=((1+5)) 或中括号
特殊变量 $n n表示第几个参数 占位符 $0 获取该脚本名称
$# 获取输入参数个数 多用于循环
$* 把所有参数看成一个整体 类似字符串
$@ 把每个参数区分对待 类似列表
$? 查看返回值 为0则执行
条件判断
1、 test 测试 $?获取返回值 0 为真 1为假
2、用[ ]括住条件表达式 表达式前后要有空格
字符串比较 用=号和!=号 前后空格
两个整数之间比较 -eq 等于 -ne 不等于 -lt 小于 -le 小于等于 -gt大于 -ge大于等于
判断权限 -r /w/x +文件名
判断文件 -e 是否存在 -f 是否为常规文件 -d 是否为目录
多条件判断 [条件表达式] && echo ok || echo nook
流程控制
流程控制
if 判断 if [条件表达式];then
程序
elif [条件表达式];then
程序
else [条件表达式];then
程序
fi
&&与 -a等价 || 与-o等价
if [条件1] && [条件2] ;then ; fi
if [ 条件1 -a 条件2 ];then ; fi
case $变量名 in
值1 )
变量值为值1,执行程序一
;;
值2 )
程序二
;;
* )
变量值不是以上的值,执行此程序
esac
for循环
1、for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
2、for 变量 in 值1 值2 ...
do
程序
done
while循环 初始值在外面先定义
while [条件判断式] ;do 程序 ;done
例
循环1+到100
sum=0
for (( i=0;i<=$1;i++ ))
do
sum=$[ $sum+$i ]
done
for i in {1..100};do sum=$[$sum+$i];done;echo $sum
a=1
while [ $a -le $1 ]
do
sum=$[ $sum + $a ]
a=$[$a+1]
done
let改写
a=1
while [ $a -le $1 ]
do
let sum+=a
let a++
done
控制台输入
读取控制台输入 read 选项 参数
选项:-p 指定读取值时的提示符 -t 等待多少秒,没有则一直等
参数:表示读取值在程序中的变量名
read -t 10 -p "输入姓名 " name
echo "welcome, $name"
函数
命令替换$(系统命令)
basename 路径 [suffix] 获取路径中的文件名(去除后缀),即最后一个/之后的文件名
dirname 截取最后一个/之前的路径名
自定义函数
[function] funname[()]
{
Action;
[return int ;]
}
使用函数前需要声明,逐行执行,函数返回值只能用$?获取,返回值为0-255的整数
获取两个参数的和
function add(){
s=$[ $1 + $2 ]
echo $s
}
read -p "请输入第一个数" a
read -p "请输入第二个数" b
add $a $b
获取两个参数的和
function add(){
s=$[ $1 + $2 ]
echo $s
}
read -p "请输入第一个数" a
read -p "请输入第二个数" b
sum$(add $a $b)
echo $sum
正则表达式入门
特殊字符:^a 以a开头的字符
a$ 以a结尾的字符
. 为单字符通配符
o* 表示o出现0到n次 *表示前一个字符出现任意次 .* 统配
[] 表示字符区间, [6,8]或[68]匹配6或8,[0-9]匹配一个0-9的数字,
[0-9]* 匹配一个任意长度的数字字符串,[a-z]匹配一个字母字符,
[a-c,e-f] 匹配a-c或e-f的任意字符
\ 转义字符 正则扩展 -E {9}表示前一位重复9次
文本处理
cut[选项参数]文件名 剪切指定文本 通常和管道一起使用
选项 -f 列号 提取第几列 -d 分隔符 按照指定分隔符分割 默认分隔符为制表符
-c 按字符进行切割 后加n表示取第几个字符
awk [选项] ' /pattern1/{action1} /pattern2/{action2}... ' 文件名
选项: -F 指定分隔符 默认为空格 -v 指定用户定义变量,参与代码计算
pattern 匹配模式(如正则) action 匹配时执行的命令
可在引号中加BEGIN{}和END{},操作开始和结束
扩展功能:内置变量
FILENAME 文件名 ,NR已读的记录数 ,NF 浏览记录的域的个数(切割后列的个数)