初学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 内容显示到屏幕上,这是很有用的参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zccccccc_tz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值