1 概念
bash(sh,pdsh扩充): GNU Bourne-Again Shell
sh:Bourne Shell,编程优秀,用户交互不便。
csh:C Shell,编程接口不如sh,用户界面友好,与C语言语法相似。 ——>tcsh
ksh:Korn Shell,集成了sh和csh的优点,并完全兼容sh。 ——>pdsh(Public Domain Korn Shell)
zsh
2 语法
2.1 变量,数据类型
变量定义:不含保留字(例如“-,*”等),不含空格。
变量的引用:赋值,for循环前不需带$;其他情况引用变量需要带"$"(例如,打印,运算等)。
数据类型:shell变量没有数据类型。
shell语句:=左右不能有空格;shell语句不以”;“结尾。
2.1.1 整数运算(+-*/%):let,expr
1)let:双引号
例如,let "x=$x+1"
2)expr:`,空格,特殊字符前需要使用转义符号\
例如,x=`expr $x + 4`,x=`expr $x \* 4`
【PS】不能进行浮点数运算,没有浮点数数据类型。
【例子:算术运算,字符拼接,shell的无数据类型】
#!/bin/bash
x=2007
let "x=$x+1"
echo $x
x=`expr $x + 4`
echo $x
echo $(expr $x / 2)
x='Olmpic'$x
echo x=$x
y=12
y=`expr $y \* 2`
echo $y
2.1.2 赋值
x=200
let "x=$x+1"
x=’hello’$x
y=$(expr $x / 2)
y=`expr $y \* 2`
result=$(($result+$num))
num=$((num+1))
#result=1
num=1
result=$(($result+$num))
#num=$((num+1))
#echo $result
echo $(($a+1))
#echo $num
echo 'aaa'+$x
echo $((-123))
echo $(($z))
2.1.3 比较操作
1)-eq,-ne,-gt和-ge,-lt和-le,-z(为空),-n(非空)
2)=,!=,>(无>=),<(无<=)
【PS】
字符串比较时,尽量不用-z,而用!-n代替。
能用1)尽量不用2)。
2.1.4 按位操作
&,|
【位运算:】
ckm@bidc:~/zzhTest> echo $(expr 1 \& 0)
0
ckm@bidc:~/zzhTest> echo $(expr 1 \| 0)
1
#!/bibn/bash
if [ $str !-n ];then
echo null!!
fi
2.2 流程控制
2.2.1 if条件控制
if [ expression ] ;then statements
fi
if [ expression ] ;then statements
else statements
fi
if [ expression ] ;then statements
else if [ expression ] then statements
else statements
fi
if [ expression ] ;then statements
elif [ expression ] ;then statements
else statements
fi
【PS】
若then换行,则then前无需加;。
[和]的后、前有空格。
2.2.2 case分支结构
case "$var" in
cindition1 ) statements;;
cindition2 ) statements;;
...
* ) statements;;
esac
2.2.3 for循环
for var in [ list ];do
statements
done
【PS】
var 变量的引用不使用$。
<list>的元素用空格分隔。
2.2.4 while循环
while [ condition ]
do
statements
done
2.2.5 until循环
until [ condition ]
do
statements
done
2.2.6 break/continue
3 bash脚本例子
【hello world】脚本的执行:hello
#!/bin/bash
#变量的使用
str='hello world'
echo $str
echo str
--执行文件
bash hello
sh hello
chmod u+x hello
hello
【Linux常用命令】
vi zzhdir
#!/bin/bash
ls –a
--执行
sh zzhdir
【局部变量:局部变量的作用域(函数体内)】
#!/bin/bash
function test {
local var=world
echo $var
}
var=hello
echo $var
test
echo $var
【PS】局部变量:首次被赋值时,变量前面加上local。
【if条件:比较操作,if条件控制结构】
#!/bin/bash
a=10
if [ $a -gt 0 ]
then echo 1
else echo 2
fi
【if条件:带参脚本】
#!/bin/bash
if [ $1 = 10 ];then echo right!
else echo wrong!
fi
--执行
sh test 123
【PS】$1用于匹配命令行的第1个参数。(bash中的保留字)
【case分支】
写法一:
export LC_ALL=C /*区分大小写*/
var=A
case "$var" in
[a-z] ) echo 'lowercase letter!';;
[A-Z] ) echo 'lowercase letter!';;
[0-9] ) echo 'number';;
* ) echo other character!;;
Esac
写法二:
var=A
case "$var" in
[[:lower]] ) echo 'lowercase letter!';;
[[:upper]] ) echo 'upper letter!';;
[0-9] ) echo 'number';;
* ) echo other character!;;
esac
【for循环:无in [list]】
for var ;do
echo ok
done
--执行
sh test
sh test 1 "hello world" a
【for循环:i的作用域】循环体内部(do/done之间)
for i in $(seq 5)
do
echo $i
done
echo $i
--执行
sh test
【for循环:seq】
for i in `seq 1 5`;do
echo TEST!
done
【for循环:i的作用域】定义后的程序块
for((i=1;i<=5;i++));do
echo $i
done
echo $i
--执行
sh test
【for循环:命令行参数】。
for param
do
echo $param
done
--执行脚本
sh test 123 456 789
【PS】未指定list,将打印所有命令行参数;当没有命令行参数时,什么都不打印
【while循环】
num=1
result=0
while [ $num -le 3 ]
do
result=$(($result+$num))
num=$((num+1))
done
echo $result
【until循环】
num=1
result=0
until [ $num -ge 3 ]
do
result=$(($result+$num))
num=$((num+1))
done
echo $result
【break/continue】
for i in `seq 1 5`;do
if [ $i = 3 ];the
continue
else echo $i
fi
done
4 Vi编辑器
命名模式:Esc键,“:”英文冒号,“wq”保存退出,“q!”强制退出
插入模式:aAiIuU
删除单词:dw
删除整行:dd
字符串查找:“/”正斜杠
5 相关拓展
保留字
正则
函数
输入,输出: >,>>,2>,1>,>&
For循环
变量的作用:整数,字符串,计数,文件属性
次元立方