《鸟哥的linux私房菜》学习笔记(第十三章 学习shell script)

第十三章 学习shell script

脚本的执行

  • 直接命令执行:在子进程中执行
    shell.sh文件必须要具备可读与可执行(rx)的权限,然后:
    ①绝对路径:使用 绝对路径/shell.sh 来执行命令
    ②相对路径:使用./shell.sh来执行
  • 以bash进程来执行:在子进程中执行
    通过bash shell.sh 或者 sh shell.sh来执行
  • source 执行脚本:在父进程中执行
  • 注:对于直接命令执行与以bash进程来执行脚本时,是开启了一个子进程,子进程完成后,子进程内的各项变量或操作将会结束而不会传回到父进程中。

判断式

test

常用命令:
① 对某个文件名做判断时,test -e filename
-e:该文件名是否存在
-f:该文件名是否存在且为文件
-d:改文件名是否存在且为目录
② 对字符串做判断时
-z:判断字符串是否为0,若string为空字符串,则为true。
③多重条件判定,如test -r filename -a -x filename
-a:两个条件同时成立
-o:任何一个条件成立
!:反向状态,test ! -x file,当file不具有x时,回传true。

中括号[]

[ -z “$HOME” ] ; echo $?
[ “$HOME” == “$MAIL”]
① 在中括号[]内的每个组件都需要有空格键来分隔
② 在中括号内的变量,最好都以双引号括号起来。
② 在中括号内的常量,最好都以单或双引号括号起来。

脚本的默认变量

$0,$1,$2……

$0表示执行脚本的时候脚本文件名
$1表示第一个输入参数
$2表示第二个输入参数

$#,$@

$#:表示后接的参数个数
$@:表示$1,$2等之意,每个变量是独立的。

shift(p385)

shift 3 表示从$1开始,拿掉3个参数,重新对参数编号,第4个参数变成$1

条件判断式

if…then

  • 单层、简单条件判断式
    if [ 条件判断式 ]; then
    当判断条件成立时,可以进行的命令工作内容;
    fi #表示结束if的意思
  • 多重、复杂条件判断式

    if [ 条件判断式 ]; then
    当判断条件成立时,可以进行的命令工作内容;
    else
    当条件判断式不成立时,可以进行的命令工作内容;
    fi #表示结束if的意思

    if [ 条件判断式一 ]; then
    当判断条件一成立时,可以进行的命令工作内容;
    elif [ 条件判断式二 ]; then
    当条件判断式二成立时,可以进行的命令工作内容;
    else
    当条件判断式一与二均不成立时,可以进行的命令工作内容;
    fi #表示结束if的意思

case…esac

见p389

funciton

p391
因为shell script的执行方式是由上而下、由左到右,因此在shell script当中的function的设置一定要在程序的最前面。
function也是拥有内置变量的。它的内置变量与shell script很类似,函数名称代表$0,而后续接的变量也是以$1,$2…来替代的。

循环

while do done,until do done

① while 当xxx时,进行循环
while [ condition ]
do
程序段落
done
②until 当xxx时,停止循环
until [ condition ]
do
程序段落
done

for do done

已经知道要进行几次循环的状态下,使用这个语法

for var in con1 con2 con3 …
do
程序段
done
② 数值处理
for ( ( 初始值; 限制值; 执行时长 ) )
do
程序段
done

shell script 的追踪与调试

sh [-nvx] xxx.sh
-n:不执行脚本,仅查询语法的问题
-v:在执行脚本前,现将script的内容输出到屏幕上
-x:将使用到的script内容显示在屏幕上,显示执行过程。

你可能感兴趣的:(linux,学习笔记)