shell 劝君更尽一杯酒
shell脚本运行方法:
1.chomd a+x myshell.sh
./myshell.sh
2. . myshell.sh
3. source myshell.sh
4. /bin/bash myshell.sh
shell 语法:
数据类型: 字符串 string
变量: 全局变量 --- 环境变量
局部变量 --- 本地变量
变量名 = 变量值 var=10
对比:
$变量名: 取变量的值
${变量名}: 取变量的值(更安全)
$(命令): 取命令的执行结果 ==命令
$((变量名)): 对变量执行算数运算
$[变量名]: 对变量执行算数运算
导出 :export
删除 :unset
* ? [0123456789][0-9]
命令代换:
$() == ` ` var=`date`
算数代换:
$(( )) == $[ ]
转义字符:
\ 转特殊意 转本身意
--
单引号: 括字符串 --- 不能展示变量
双引号: 括字符串 --- 可以将变量展开 ---- 建议在取变量值时,都加““ 尤其是在测试条件中
控制语句: if else switch case for while ...
条件判别表达式:真:0 假:1
test 测试条件
[空格 测试条件]
整数判别符: -eq 等于 -ne不等于 -gt大于 -lt小于 -ge大于等于 -le小于等于
文件类型判别符: -d 目录文件 -f 普通文件 -p 管道 -l 软连接 -c 字符设备 -b 块设备 -s socket
字符串长度判断 : -z 空字符串(长度为0) -n 非空字符串(长度非0)
字符串判等 : = 相等 !=不等
逻辑运算: -a ------- && 逻辑与
-o -------- || 逻辑或
! ------- 逻辑非
if语句:
if[判别条件];then
执行内容
elif[判别条件];then
执行内容
else
执行内容
fi
case分支语句:
case 变量 in
条件1.1|条件1.2|条件1.N)
执行的语句;;
条件2.1|条件2.2|条件2.N)
执行的语句;;
*)
执行的语句;;
esac
for循环语句
for TEST in `ls` ;do
ls -1 $TEST
done
while循环语句
count=1
read passwd
while [ $passwd != "itcast" -a $count -lt 3] ;do
echo "Try again"
count=${count+1]
read passwd
done
【位置参数】:
$0 : 类似于C中的argv[0] --- 描述可执行程序名
$1-$N : 类似于C中的argv[1]-- argv[N] 命令行参数
$# : 计算命令行参数的个数(不包含 argv[0])
$*/$@: 表示所有的argv 命令行参数(不包含 argv[0])
$$: 取出本进程的进程号
shift 左移 命令参数
函数:
函数名(){
函数体
}
$1 $2 $3 $N
调用函数传参: 函数名 参数1参数2 参数3....参数N
函数外:$0 ---- 命令行参数的 argv[0] (shell脚本名称)
$1-$N 命令行参数的 argv[0]-argv[N]
函数内:$0 ---- 命令行参数的 argv[0] (shell脚本名称)
$1-$N 函数的参数1--参数N
面向对象: 封装,继承,多态,重载。。。
框架:
正则表达式:
字符类使用的符号:
. 匹配一个字符 *匹配多个字符 [ ]匹配指定范围字符 -在[ ]中设定范围 ^匹配除该符号以后的其他字符,在[]内使用
数值类:
?:0-1 +:1-N *: 0-N {N} 前面单元的N次
{N,} :最少N次 {,M}:最多N次 {N,M}: 最少N次,最多M次
位置限定:
^:行首
$ : 行尾 grep ^([0-9]{1,3}.){3}[0-9]{1,3}$ 查询文件
<:单词的开头 <th then thread the
>:单词的结尾 <th fourth
\b:单词的开头、结尾 \b at \b \bth | th\b | \bthe\b
\B:非单词的开头、结尾
基础正则: grep -E
使用 \ 将 ? +{ } () |
扩展正则: egrep