1.以#!/bin/bash 开头
2.执行方式 bash sh ./ `script`
3.变量: 系统变量 自定义变量 --->export 可导出为全局环境变量
set显示所有shell变量 unset 取消变量 readonly静态变量不能被unset
4.获取命令返回值
A=`ls -al` ===== A=$(ls-al) -----> echo $A
5.参数取值
&* 全部参数
$@ 无引号时代表全部参数,有引号代表全部参数的数组
$# 传入参数的个数
$n 代表传入的第几个参数,0代表shell本身 第10位以上的参数${10}
$$ 当前进程号
$! 后台运行的最后一个进程号
$? 上一个命令执行的返回状态 0代表成功
6.运算符
$((calc)) 或者 $[cals]
expr `clac` 直接输出了
例:expr `expr 2 + 3` \* 4 -->20
A=[(2+3)*4] echo $A -->20
7.条件判断
[ condition ] 注意:前后有空格
23是否大于22 [ 23 -gt 22 ]
test.txt是否有读权限 [ -r test.txt ]
hive.log是否存在 [-e /hive.log]
8.分支语句
if case
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#!/bin/bash if [ $1 = 123 ] ; then 不换行写分号 echo 123 elif [ $1 = 456 ] 换行不用写 then echo 456 else else不写then echo 666 fi #!/bin/bash case $1 in 1) echo 1 ;; 注意双分号 2) echo 2 ;; *) 没匹配的执行这个 echo 666 ;; esac
for while
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
s=0 for ((i=0;i<=100;i++)) 也可 ;do do s=$[$s+$i] done echo $s for x in 1 2 3 ; do echo $x done for y in "$@" do echo $y done i=0 s=0 while [ $i -le 100 ] 用此类型比较符 do s=$[$s+$i] i=$[$i+1] done echo $i echo $s
9.控制台读入信息
read -t 10 -p "等待10秒读入姓名" NAME echo $NAME
10.函数
basename 获取文件名(去除目录部分)
dirname 获取目录(去除文件名部分)
自定义函数 function funName()
{
方法体(没有return时,最后一条语句作为返回值,$?获取)
}