Linux Sell Scripts学习笔记

注意事项:

  1. 指令的执行是从上而下、从左而右的分析与执行;
  2. 指令的下达: 指令、选项与参数间的多个空白都会被忽略掉;
  3. 空白行也将被忽略掉,幵且 [tab] 按键所推开的空白同样规为空格键;
  4. 如果读取到一个 Enter 符号 (CR) ,就尝试开始执行该行 (或该串) 命令;
  5. 至于如果一行的内容太多,则可以使用『 [Enter] 』来延伸至下一行;
  6. 『 # 』可做为批注!任何加在 # 后面的资料将全部被视为批注文字而被忽略!

执行方法

直接指令下达:

  • 绝对路径
  • 相对路径:./shell.sh
  • 变量PATH功能。放入PATH包含的目录下。可在全局直接执行
    bash程序执行(R权限)
  • bash shell.sh
  • sh shell.sh
第一支script
#!/bin/bash
PATH=PATH:~/bin
export PATH
echo -e "Hello World!\a \n"
exit 0

chmod a+x sh01.sh;./sh01.sh

判断式test

test -e filename

Test的标识 代表意义
1.以下开始为: 关于某个档名的文件类型判判断,如 tets -e filename
-e 该档名是否存在
-f 是否存在且为file
-d 是否存在且为directory
-b 是否存在且为一个block device装置
-c 是否存在且为一个character device 装置
-S 是否存在且为一个Socket档案
-p 是否存在且为一个FIFO档案
-L 是否存在且为一个连结档
2.以下开始为: 关于某个档案的权限侦测,如 tets -r filename表示是否可读
-r 是否存在且可读
-w 是否存在且可写
-x 是否存在且可执行
-u 是否存在且具有SUID属性
-g 是否存在且具有SGID属性
-k 是否存在且具有Sticky bit属性
-s 是否存在且为非空白档案
3.以下开始为: 两个档案之间的比较,如test file1 -nt file2
-nt (newer than)
-ot older than
-ef equal file
4.以下开始为: 关于两个整数之间的判断,如test n1 -eq n2
-eq equal
-ne not equal
-gt greater than
-lt less than
-ge greater than or equal
-le less than or equal
5.以下开始为: 判定字符串的数据
test -z string zero
test -n string not zero
test str1 = str2 equal?
test str1 != str2 not equal?
6.以下开始为: 多重条件判定,test -r filename -a -x filename
-a test -r file -a -x file
-o test -r file -o -x file
! test ! -x file

判定符号[]

在bash语法中使用[]来作为shell的判断式时,必须要注意中括号的两端需要有空格符来分隔。

[ "$HOME" == "$MAIL" ]
 //bash当中一个=和两个=一样,推荐两个
  • 中括号内部的每个组件需要有空格键分隔
  • 中括号内的变数最好都以双引号括起来
  • 中括号内的常数最好都以单或双引号括起来

默认变数($0,$1)

  • $# : 代表后接的参数个数
  • $@ :全部参数,代表"$1" "$2" "$3" ...
  • $*$1 $2 $3 ...

shift n偏移几个,默认n=为0,移除第一个

条件判断式

if then语句

	if[];then
	;
	fi
	
	if[];then
	else 
	;
	fi
	
	if[];then
	;
	elif[];then
	;
	else
	;
	fi

	[ "$yn" == "Y" -o "$yn" == "y" ] 
	等同于
	[ "$yn" == "Y"] || ["$yn" == "y" ]

case esac语句

case $变量名称 in
"第一个变量内容")
	程序段
	;;
"第二个变量内容")
	程序段
	;;
*)
	exit 1
	;;
esac

function

function fname(){
	程序段
}

函数内建变量形式和bash一样 $1,$2..

循环loop

while []
do 
	程序段
done

until[]
do
程序段落
done

for var in con1 con2 con3 ...
do
	程序段
done

for((初始值;限制值;执行步阶))
do
	程序段
done

追踪与debug

sh [-nvx] scripts.sh
-n:不执行仅检查语法问题
-v:执行前,先将脚本内容输出到屏幕上
-x:将使用用的脚本内容显示到屏幕上

猜你喜欢

转载自blog.csdn.net/panbinxian/article/details/82910564