1、shell是解析性语言----》给系统管理员使用 c:编译性语言
什么是shell:它是一个用户与内核的接口程序,解析用户命令告诉内核
2、shell的分类:sh bash ....
which cd是无法查看的,因为它是内部命令
ls:可执行文件,从环境变量的路径上找到的
3、shell脚本:
后缀:.sh -----> test.sh
通过约定的格式将命令组合起来,实现自动化.
如:#!/bin/bash
echo "hello"
解析器解析命令和变量(这里的变量是没有类型的)
3、1变量:
1、自定义变量 2、环境变量 3、预定义变量 4、位置变量
1、自定义变量
定义:myname = "123"
引用:$myname
2、环境变量
export PATH=$PATH:/usr/local
环境变量PS1=
3、位置变量
描述:$0 $1 --- $9
作用:用于外部传参
4、预定义变量
$#:命令行中位置参数的个数
$*:所有命令行中位置参数的值
#!/bin/bash #echo "helloworld" echo "helloworld" myname="ltest tt" echo $myname fruit=apple mytree='$fruit tree' echo $mytree today='today is `date`` echo $today #echo $0 #echo $1 #echo $2 #echo $# #echo $*
-------------------------------------------------------------
3、特殊字符
1、引号:“” ,‘’, ``.
"":特殊字符保留自己的特性
myname = "hello"
echo "$myname is hello"
结果:hello is hello
‘’:全部当做字符串来处理
“$myname is hello”
结果:$myname is hello
``:解析命令
today = "today is `data`"
2、管道 | 将一个命令的输出作为另一个命令输入
ls -l | wc -w
3、通配符 * ? []
*:代表任意字符
?:代表任意一个字符
[abc] :代表一个指定范围内的字符,即匹配a,b,c中任意字符
3、重定向:
>:直接清空
>>:追加
1 #!/bin/bash 2 SIZE=`du -sh /var/lib/mysql` 3 DAY=`date +%Y%m%d` 4 echo "day: $DAY" >> /tmp/dbinfo.txt 5 echo "size: $SIZE" >> /tmp/dbinfo.txt 6 cd /opt/dbbak/ 7 tar czvf mybak${DAY}.tar.gz /tmp/dbinfo.txt /var/lib/mysql 8 rm /tmp/dbinfo.txt
shell的运算
ff = `expr 4 + 5`
echo $ff
或者
let a = 4+5
echo $a
-------------------------------------------------------------------
字符串的处理
var = "hello"
echo "${#var}"//统计变量var中字符串的大小....
复杂一点:sed awk
--------------------------------------------------------
条件测试操作
命令: 1.test 条件表达式
2.[ 条件表达式 ]
$? 0 ->真 非0-->假
条件表达式类型
文件状态/字符串比较/整数值比较/逻辑测试
1. 文件状态:
test 操作符 文件
2.字符串符比较
[ 字符串1 == 字符串2 ]
3.整数值比较
[ 整数1 操作符 整数2 ]
-eq
4. 逻辑测试
&& --> -a
|| ---> -o
!:
[ $b -gt 0 ] || [ &c -gt 0 ] && [ &a -gt 0 ]
1 #!/bin/bash 2 RATE=`df -hT | grep "/mnt/hgfs" | awk '{print $6}' | cut -d "%" -f 1` 3 if [ $RATE -gt 80 ] 4 then 5 echo "waing" 6 echo "eaing" 7 fi
2.6 语句
1.if
if 条件测试表达式
then
命令集
fi
-------------------------
if 条件测试表达式
then
命令集1
else
命令集2
fi
-------------------------
if 条件测试表达式1
then
命令集1
elif 条件测试表达式2
then
命令集2
elif 条件测试表达式3
then
命令集3
else
命令集4
fi
2、for
2.for
for 变量名 in 取值列表
do
命令集
done
1 #!/bin/bash 2 for TM in "moring" "noon" "evening" 3 do 4 echo $TM 5 done
3.while
while 测试表达式
do
命令集
1 #!/bin/bash 2 i=1 3 while [ $i -le 6 ] 4 do 5 echo "hello" 6 i=`expr $i + 1` 7 done
4.case
case 变量 in
值1)
命令集
;;
值2)
命令集
;;
*)
命令集
;;
esac
1 #!/bin/bash 2 case $1 in 3 start) 4 echo "start-----" 5 ;; 6 stop) 7 echo "stop-----" 8 ;; 9 *) 10 echo "---------" 11 ;; 12 esac
2.7其它
break //跳出循环
continue
read
#!/bin/bash read -p "hekfe" nf //从键盘输入,传给nf... echo $nf
2.8函数
1。声明
function 函数名
{
命令集
}
或
函数名()
{
命令集
}
2.调用
函数名
1 #!/bin/bash 2 adder() 3 { 4 echo `expr $1 + $2` 5 } 6 adder 12 34 7 adder 11 22