Shell就是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。它为用户提供了一个向Linux发送请求以便运行程序的接口系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。 Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。
<1> shell脚本--> 命令行解析器
是一个文件,命令的有序集合
脚本文件以“.sh”结尾
-----------------------------------------------------------------------------------------
<2> 运行一个shell脚本文件:第一种:使用系统的bash
bash shell.sh
第二种:给shell脚本文件赋予可执行的权限
./shell.sh
-----------------------------------------------------------------------------------------
<3> 脚本语言都是弱类型:
shell变量没有类型
C语言是编译型语言,shell是解释型语言。
-----------------------------------------------------------------------------------------
<4> shell脚本变量命名规则:
1. 见名知义
2. 由字母、下划线、数字组成
3. ----不能以数字开头------
-----------------------------------------------------------------------------------------
<5> 变量赋值:
C语言:
int var = 5;
shell:
var=5;
注意:在变量赋值的时候等号两边不能有空格
-----------------------------------------------------------------------------------------
<6> 变量的引用(输出):
使用echo:
echo $var
注意:在变量的输出时要加($)符号
-----------------------------------------------------------------------------------------
<7> 内置环境变量:
PATH HOME USER HOSTTYPE
-----------------------------------------------------------------------------------------
<8> 内置位置变量:
1.$0 : shell脚本文件名
2.$1-$9 : 命令行传入的参数,从脚本文件名后一个参数开始
3.$* : 命令行传入的所有参数,除了脚本文件名
4.$@ : 命令行传入的所有参数,除了脚本文件名
5.$$ : shell脚本的进程号
-----------------------------------------------------------------------------------------
<9> shell脚本控制语句:
1.输入 : read
执行脚本的时候从终端获取一个值赋值给read的变量。
read var
echo $var
read var1 var2
第一个参数给var1,后面所有的参数都给var2。
2.算术运算 :
进行算术运算: expr
expr 1 + 2
注意:expr、数字和运算符之间都要加空格。
进行算术运算: let
let var=1+2
注意:变量、数字和运算符之间都不要加空格。
3. test与[ ] :
使用[ ]的时候特别要主要中括号的前后都需要有空格。
查看帮助文档:
man test
(1) 字符串:-n:测试字符串的长度不为0(nonzero)
-z:测试字符串的长度为0(zero)
=:测试两个字符串相等(equal)
!=:测试两个字符串不相等(not equal)
(2)整数:-eq:测试两个整数相等(equal)
-gt:测试一个整数大于另外一个整数(greater than)
-ge:测试一个整数大于或等于另外一个整数(greater than or equal)
-le:测试一个整数小于或等于另外一个整数(less than or equal)
-lt:测试一个整数小于另外一个整数(less than)
-ne:测试一个整数不等于另外一个整数(not equal)
(3)表达式:-a:两个表达式为真最终结果为真 (and)
-o:有一个表达式为真整个表达式为真 (or)
!:表达式为假
(4)文件: -e:测试文件是否存在(exists)
-d:测试存在并且是否为一个目录(directory)
-f:测试存在并且是否是一个普通文件(regular)
-w:测试文件是否可写(write)
-r:测试文件是否可读(read)
-x:测试文件是否可执行(execute)
[ -f file ] :测试文件存在并且是一个普通文件
! [ -f file ] :测试文件不存在
[ ! -f file ]
-----------------------------------------------------------------------------------------
<10> 控制语句:
1. if 语句:
C语言形式:
for(expr1;expr2;expr3){
Code;
}
shell:
for 变量名 in list(列表,单词表)
do
CMD
done
运行原理:
根据单词表中的值的个数来决定循环的次数。
即把单词表(list)中的值分别按顺序的给变量进行赋值,一直到最后一个值为止。
单词表的构建:
1.直接列举
2.通过命令行获取($*/$@)
3.通过命令置换(`ls`)
4.通过子shell($())
for 变量名
do
CMD
done
这种形式的单词表在命令行
-------------------------------------------------------------------------
2. case 语句:
C语言形式:
switch(const_expr){
case const_expr1:
C;
break;
case const_expr2:
C;
break;
default:
C;
break;
}
shell:
case 变量的引用 in
模式1)
CMD
;;
模式2)
CMD
;;
*)
CMD
;;
esac
-------------------------------------------------------------------------
3. for 语句:
C语言形式:
for(expr1;expr2;expr3){
Code;
}
shell:
for 变量名 in list(列表,单词表)
do
CMD
done
运行原理:
根据单词表中的值的个数来决定循环的次数。
即把单词表(list)中的值分别按顺序的给变量进行赋值,一直到最后一个值为止。
单词表的构建:
1.直接列举
2.通过命令行获取($*/$@)
3.通过命令置换(`ls`)
4.通过子shell($())
for 变量名
do
CMD
done
这种形式的单词表在命令行
-------------------------------------------------------------------------
4.while语句 :
C:
while(expr){
Code;
}
shell:
while [ expr ]
do
CMD
done
-----------------------------------------------------------------------------------------
<11> 函数:
C语言形式:
void test(){
Code;
}
调用:
test();
shell:
第一种:
function test(){
CMD
}
第二种:
test(){
CMD
}
调用
第一种:
直接函数的名字
test_1
test_2
第二种:
命令置换
`test_1`
`test_1`
注意:
1.函数不能返回字符串
2.shell中的变量都是全局变量,如果希望这个变量是局部的加限定词:local