初学LINUX笔记(10)Shell Scripts

简单脚本编写

对谈式脚本

通过之前提到的read指令,可以实现读取键盘的输入,对谈式脚本便可以用这个指令来实现。
在这里插入图片描述

日期相关脚本

在这里插入图片描述

简单数据相加减乘除

在这里插入图片描述

脚本执行方式差异

不同的脚本执行方式会导致不一样的结果,尤其是bash的环境影响。

直接执行

利用 sh 脚本名 的方式进行脚本的执行,之前也提过在脚本中定义的变量并不能在bash环境下运用。
因为用直接执行的方式来处理脚本,系统会给一支新的bash来运行脚本,在脚本执行完毕后,子程序bash内的所有数据都被移除,所以我们无法在bash环境中再次调用申明的变量。

source

运用source可以让脚本在父程序中运行。

善用判断式

test

在这里插入图片描述
下表内容也可以用help指令获取。

测试标志 含义
档名类型的判断
-e 档名是否存在
-f 档名是否存在且为文件
-d 档名是否存在且为目录
-b 该档名是否存在且为一个block device装置
文件权限判断
-r 该档名是否存在且具有『可读』的权限?
-w 该档名是否存在且具有『可写』的权限?
-x 该档名是否存在且具有『可执行』的权限?
-u 该文件名是否存在且具有『SUID』的属性?
-g 该文件名是否存在且具有『SGID』的属性?
-k 该文件名是否存在且具有『Sticky bit』的属性?
-s 该档名是否存在且为『非空白文件』
两个文件之间比较
-nt (newer than)判断 file1 是否比 file2 新
-ot (older than)判断 file1 是否比 file2 旧

[ ]

运用时需要注意以下几点:

  • 在中括号 [] 内的每个组件都需要有空格键来分隔;
  • 在中括号内的变数,最好都以双引号括号起来;
  • 在中括号内的常数,最好都以单或双引号括号起来。

shell script的默认变数

  • $# :代表后接的参数『个数』,以上表为例这里显示为『 4 』;
  • $@ :代表『 “$1” “$2” “$3” “$4” 』之意,每个变量是独立的(用双引号括起来);
  • $* :代表『 “$1c$2c$3c$4” 』,其中 c 为分隔字符,默认为空格键, 所以本例中代表『 “$1 $2 $3 $4” 』之意。
  • $0: 代表执行该脚本的档名,后跟其余数字为执行脚本时的参数

条件判断式

if then

这里和c类似

单层、简单条件判断语句

if [ 条件判断式 ]; then

fi

这里的fi并没有写反,意思是结束if的条件判断。

多重、复杂条件判断式

类似

if [ 条件判断式一 ]; then

elif [ 条件判断式二 ]; then

else

fi

case esac

case $变量名称 in
	"第一个变量内容") <==每个变量内容建议用双引号括起来,关键词则为小括号 )
		程序段
		;; <==每个类别结尾使用两个连续的分号来处理!
	"第二个变量内容")
		程序段
		;;
	*) <==最后一个变量内容都会用 * 来代表所有其他值
		程序段
		exit 1
		;;
esac

function 功能

类似于c语言的函数,不同是:

  • shell script 的执行方式是由上而下,由左而右, 因此在 shell script 当中的 function 的设定一定要在程序的最前面。(C只要声明了就无关位置)

当然了,function也可以拥有参数,用法与shell script的参数传递类似,下面放一个鸟哥书上的例子:

function printit()
{
    
    
	echo "Your choice is ${1}" # 这个 $1 必须要参考底下指令的下达
}
echo "This program will print your selection !"
case ${
    
    1} in
	"one")
		printit 1 # 请注意, printit 指令后面还有接参数!
		;;
	"two")
		printit 2
		;;
	"three")
		printit 3
		;;
	*)
		echo "Usage ${0} {one|two|three}"
		;;
esac

鸟哥的书把function放在了条件判断里面,个人感觉不是那么的严谨,不过问题不大。

循环语句

while do done, until do done

一种是while do done,和C中的while相同。

while [ condition ]
do
	程序段落
done

另一种是until do done,恰好和while相反。

until [ condition ]
do
	程序段落
done

for do done

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

每次循环var的值都被替换为下一个状态(con1到conN)

for do done

这个和上一个比起来就更像是C了

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

shell script的追踪和debug

sh [-nvx] scripts.sh
选项 作用
-n 不要执行 script,仅查询语法的问题
-v 再执行 sccript 前,先将 scripts 的内容输出到屏幕上
-x 将使用到的 script 内容显示到屏幕上,这是很有用的参数

猜你喜欢

转载自blog.csdn.net/qq_43550173/article/details/108940839
今日推荐