Linux 学习之Shell Script
jinhucheung opened this issue · comments
1. Script的执行方式
Script执行方式分为直接执行和source执行
1.1 直接执行
其中直接执行,是启动子进程执行Script,父进程休眠,Script中的操作不影响父进程.
可以分为路径执行,PATH执行与sh执行(sh是/bin/bash的硬连接)
这里说下sh执行,sh可以调试script
使用参数-n 不执行script,仅检查语法
使用参数-x 调试模式,显示执行时的script(变量都被准确赋值)
1.2 source执行
父进程中执行,操作会影响父进程
3. test与判断式
3.1 test
我们可以使用test
来查看文件是否存在及其属性,也可进行数值比较与字符串比较(这两个也可以在判断式中比较)
以下是test的一部分参数表
参数 | 代表意义 |
---|---|
判断文件存在与类型 | 格式 test -e filename |
-e | 该文件是否存在 |
-f | 该文件是否存在且为文件 |
-d | 该文件是否存在且为目录 |
-b | 该文件是否存在为块设备 |
判断文件权限 | 格式 test -r filename |
-r | 该文件是否可读 |
-w | 该文件是否可写 |
-x | 该文件是否可执行 |
-u | 是否具有SUID |
-g | 是否具有SGID |
-k | 是否具有SBIT |
比较两数值 | test n1 -eq n2 |
-eq | == |
-ne | != |
-gt | >(greater than) |
-lt | < |
-ge | >= |
-le | <= |
判断字符串数据 | |
test str1=str2 | 相等 |
test str1!=str2 | 不相等 |
多重条件判定 | 逻辑操作 |
-a | AND : test -e file1 -a test -e file2 |
-o | OR |
! | 反向:test ! -e file1 |
3.2 判断式[]
判断式基本格式
x=1
[□$x□-le□0□]
注意□
为空格,在变量/常量/操作符间一定要有空格
4. shell script的默认变量
当我们执行命令时,会带参数(执行操作,文件参数等)
我们在script中怎么读取这些参数,script内置了变量$#
,$@
,$num
来表示这些参数
$#
参数个数$@
参数列表$num
其中$0表示script名 $1..$num表示第num个参数
5. 程序结构
5.1 判断结构
if结构
if [ 条件1 ] ; then
代码段1
elif [ 条件2 ] ; then
代码段2
esle
代码段3
fi
swicth结构
case $var in
constant1 )
代码段1
;;
constant2 )
代码段2
;;
* )
代码段
;;
esac
注意这里的swicth不能跨段,就是constant1
后一定有;;
constant
可以是通配符,比如[Yy]
5.2 循环结构
while..done : 满足条件循环
while [ 条件 ]
do
代码段
done
utile...done : 满足条件终止循环
util [ 条件 ]
do
代码段
done
for...each : 循环遍历
for var in con1 con2 con3 ...
do
代码段
done
例子
for filename in $(ls -al .)
do
echo $filename
done
for...done : 条件遍历
s=0
for (( i=1 ; i <= $num ; i++ ))
do
s=$(($s+$i))
done
6. function
function需要写在执行之前,因为script执行顺序是从上到下,从左到右
而且function内置有变量,跟script类似
需要返回值是使用return
例子:
function calnum (){
if [ $1 -le 0 ] ; then
return 1
fi
sum=0
for (( i=1 ; i<=$1 ; i++ ))
do
sum=$(($sum+$i))
done
echo $sum
return 0
}