Shell解释功能常有两种:
1. 单条命令 -----交互式的
2. Shell脚本------
3.
Shell程序
:
第一章:
变量:大小写敏感,本地变量,环境变量
第一个变量:a=10--------------局部变量,echo $a打印变量
本地变量不能被继承,全局变量可以被继承-------------shell脚本中不能打印局部变量
全局变量 export a------------声明全局变量
显示变量的值:echo $a 或者 echo $(a)------------区分$AB 和$A
Set----------------------------显示所有的变量
Env------------------------------显示所有的变量(只是显示所有的环境变量)
Export m2=100等价于:m2=100;export m2;
只读变量:readonly aa=200------这个只能访问,不能重心赋值,也不能清除,非只读变量可以清除
位置参量(命令行参数)
$0---------表示当前脚本名称
$1---------表示第一个位置参量
........
${10}----------------表示第十个位置参量
类似的有${11}等....
$#---------------表示位置参量的总数
$*------------------以单个参数显示所有的位置参量
Echo ‘j=’------------------单引号内容原样打出
----------------------------双引号内容表示一个参量
$!----------------------------最后一个进程在后台运行的进程号
$?----------------------------前一个命令的推出状态
数组:
定义:arr=(enlish china compane)
引用:echo ${arr[i]}
数组元素的个数: echo ${#arr[*]}
第二章:
输入输出
Read var--------输入一行赋值给var变量
Read –aarr------------------赋值一个数组(空格间隔)
Read -p ”input :” –t 10 –a arr--------“-p”提示信息,-t超时返回
Echo--------------输出
Echo hell0
Echo $a------------------输出变量a的值
Echo ${a}b-------------在输出变量a后连接b字符
Echo –n “hello”-------在字符串中不加\n
Echo -e “\t”-----------将\t交给echo来解析表四tab建
Echo输出颜色雨光标的定位:
在\33[30m--\33[37m---------------设置前景色,即字体的颜色
在\33[40m--\33[47m----------------设置背景色
\33[y;x--------------------------------设置光标位置
\33[0m------------------------------------------还原所有的设置
实例子:
Echo –e “\33[31tjjjgjjg”------------------
第三章:
单引号,双引号的区别
单引号----------------忽略所有的特殊字符
双引号-----------------忽略部分的特殊字符,但是不能忽略单引号还有$等.....
反引号------------------波浪建,命令替换----------------也可以用$()命令替换
Basename-------------求路径里最后一个的名称
Dirname----------------
多层的反引号需要用转义字符“\”
算术运算符(跟c语言是一模一样的):
算术的扩展:$[]
N=10
$[$N+1] 等于11
$(())----和$[]等价
(())-----------------((n+=1))--------------这个不能作为表达式
T=((n+1))-------------------错吴
Expr 1 +2-----------------可以,也可以作为左值将其赋值给变量
R =‘Exp 4 \* 5 ’-----------------将20赋值给R
Let “n=n+1”----------------------------
第四章:
备注:空格这里非常重要,少了可能就是语法错误
条件测试
命令成功或失败,表达式为真或假-------真用0,假用非0
Test---------------shell内置命令
Test $x –gt $y------------------判断x是否大于y--------[ $x –gt $y ]-------这种一定要有空格
Name=tom
[[ $name = [tT]?? ]]----------------------支持通配符的匹配
[ -z $str ]---------------------------------测试一个字符串是否为空,空为真(0)
[ -n $str ]--------------------------------测试一个字符串为非空串,非空为真(0)
[ $str1 = $$str2]-------------------------测试两个字符串是否相等,相等为真(0)
[ $x –eq 1 ] ----------------------------测试是否相等,等为真(0)
Let “$x == 1”--------测试是否相等,等为真(0)
Let和双圆括号可以使用“== >=<= !=”等这些算术操作符,而中括号是不可以的
逻辑测试:
-a 与
-o 或
! 非
例子:
X=1;name=tom
[ $x -eq 1 –a –n $name]---两个表达式相与
检测字符串为空串:
[ “$name” = “”]
[ ! “$name”]
[ “x${name}” = “x”]
-----------------------空返回真(0)
文件测试:
[ -f a ]----------------检测文件是否存在,存在返回为真(0)
[ ]
第五章:
If语句:
语法结构:
If expr1
Then
Elif expr2
.....
Else
Command
Fi
Case分支语句:
Case expr in
Pattern1)
Command
;;
Pattern2)
Command
;;
......
*)
Command
;;
esac
pattern可以含有通配符
第六章:
循环语句:
For variable in list
Do
Command
Done
Eg:
For i in 1 2 3 4 5
Do
Echo $si
Done
位置参量使用:
For i in $*
For i in “$*”
For i in $@------双引号对其不起作用
For i in “$@”
For f in *------------------统计当前目录的文件个数
For的另外一种方式:
For((e1;e2:e3))
Do
command
done
while循环表达式:
while epr
do
command
done
until expr--------------------条件为假(非0)执行循环
do
done
break [n]---------------跳出n重循环
continue [n]---------------t跳出n次循环
select循环与菜单:
select varible in list
do
command
done
PS3=”FAVERATOR PET”------友好的提示信息