学习Linux 《鸟哥的Linux私房菜 基础学习篇(第三版)》--第13章 学些shell script 笔记

看了很长时间,终于看到Shell Script了。加油吧!

Linux系统服务(services)的接口都放在/etc/init.d这个目录下,这个目录下的文件都是scripts。


编写第1个Shell Script  还是从“Hello World”开始吧



1、第一行的   #!/bin/bash 表示这个script使用的是bash。

2、最后一行的 exit 0 表示这个script结束后返回一个返回值为0


第2个Shell Script 希望做一个可以和用户交互的Shell,用户输入firstname和lastname,然后script返回fullname。



第3个Shell Script 通过用户输入用户名,并根据date命令获得的日期,然后用touch命令创建文件。


filename=${fileuser:-"filename"} 的写法之前用过,将filename变量 设置值为fileuser 如果fileuser为空或者不存在则使用:-后面的filename默认值来给filename变量赋值。


第4个 Shell Script 用户输入两个数字,对两个数字进行计算。



变量定义为整形以后才可以进行计算。可以使用declare -i num来进行定义。

也可以直接使用 total=$(($num1*$num2))来进行计算   $((计算内容))计算数值。


第5个 Shell Script。用户输入一个文件名,用test命令来判断文件是否存在并输出文件的权限。



第6个 Shell Script 提示用户输入Y/N,根据用户输入的内容判断输出。


由于输入的内容可能是大写或者小写,因此这里使用 -o 来连接(的意思)。


第7个 Shell Script,在shell后面添加输入参数。


  • $0 代表script名称
  • $# 代表script名称后面接的参数个数
  • $@ 代表("$1" "$2" "$3") 每个参数独立的用双引号括起来
  • $* 代表("$1c$2c$3") ,c为分隔符,默认为空格,代表意思为"$1 $2 $2"
     -lt 2 表示小于2 

第8个 Shell Script 在sh07的基础上进行修改,了解shift 偏移参数的功能




通过执行结果可以知道,shift 可以将参数向后偏移,也可以在shift后面接数字,来选择偏移的参数数量.

Shell Script 条件判断,if... then 

  • 单层,简单的判断
if [ 条件 ] then
满足条件执行的内容
fi  <== if 反过来
    && 表示 and
    ||    表示  or

下面把sh06.sh 改为用if then的方式

  • 多重,重复的条件判断

第9个 Shell Script ,根据输入的参数做出提示。



第10个 Shell Script 通过netstat -tuln | grep 来查看系统开启的端口,并输出信息.



第11个 Shell Script 通过用户输入一个日期,计算还有多长时间退伍。



其中 echo $date2 | grep '[0-9]\{8\}' 判断输入的是否是八位数字
$()的作用和反引号` `的作用相同,都是将括起来的内容当作命令来执行,并将结果返回。

第12个 Shell Script  用case in 语句 修改sh09.sh实现相同功能



case 语句的用法

case $变量名称 in
"第一个变量内容")   //第一个变量内容+右括号
第一个执行内容
;;//以;;两个分号结尾
"第二个变量内容")//第二个变量内容+右括号
第二段执行内容
;;//以;;两个分号结尾
*)//剩余内容以*)  星号加上右括号
剩余的执行内容
;;//以;;两个分号结尾
esac//以esac结尾,就是将case反过来写。

第13个 Shell Script 用$1作为 case 的输入变量 代替使用 read



利用function功能

function fname(){
执行内容
}

由于Shell Script 中的执行顺序是从上到下,从左到右的,因此定义的方法要写在前面。
下面将Sh12.sh修改一下 定义个function


第14个 Shell Script   function中的$1 和 Shell Script 并非同一个



运行以后可以发现输出的结果是 Your choice is 1 并非输入的one。

loop 循环

while do done,until do done。

while [ condition ]    当满足condition时执行循环
do //程序开始
执行内容
done //程序结束

until [ condition ]当不满足condition时执行循环
do //程序开始
执行内容
done //程序结束

第15个Shell Script 使用while 执行循环,直到用户输入yes/YES时退出



第16个Shell Script 使用until执行循环,直到用户输入yes/YES时退出



可以比较15 和 16的差异。注意15种 while [ ]的判断使用的是 -a 表示and而 16中使用的是-o表示or

第17个 Shell Script 计算1+2+3+...+100的结果并输出



第18个 Shell Script 将上一个Shell 稍微改造一下,根据用户输入的数字计算1+2+..+n,并输出结果



for...do...done(固定循环)

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

就上面的例子,第一次循环时,$var 内容是 con1
 第二次循环时,$var 内容是 con2
 第三次循环时,$var 内容是con3
下面来个简单的练习。

第19个 Shell Script  简单的for使用


输出结果为:


第20个 Shell Script 根据/etc/passwd 检查用户登陆信息等

cut -d(分割) -f1(取到第一个字段)

第21个 Shell Script 通过ping 命令查看网络状态


其中ping 命令中 -c 1 表示发送1个包后停止; -w 1表示等待最多1毫秒。

1. 标准输入stdin文件描述符为0,标准输出stdout文件描述符为1,标准错误stderr文件描述符为2

2. /dev/null 空设备,相当于垃圾桶


& > 等同于 2>&1 将标准输出和标准错误重定向到,   >等同于 1 >将标准输出重定向到

&> 不影响前面 ping 命令的返回结果,因此当ping 成功时 result=0,ping 失败时 result=1

第22个 Shell Script 用户输入一个目录名称,打印出目录下的文件权限


执行结果如下


第23个 Shell Script      for do done 的另外一种用法,计算1+2+3...+n



for((初始值;限制值;执行步阶))
do
循环内容
done

这样的循环方式和java中的 for(;;)非常像。

Shell Script 的追踪与Debug

sh -[nvx] scripts.sh
-n: 不执行script 只查询语法错误
-v: 在执行script前先将script内容 输出到屏幕上
-x: 将使用到的script内容显示在屏幕上。 

Shell Script执行方式的差异(source,sh script,./script)

  • 利用直接执行的方式来执行。
此时将会使用一个新的bash环境,在新的bash中定义的变量在父bash环境中没有定义,并且在子程序结束后,子程序的bash环境会销毁。
例如在上面sh02.sh中
$firstname 和$lastname 都输出为空,没有定义。
  • 利用source来执行:在父程序中执行
如果用source来执行的话,效果就不一样了。
我们可以看到$firstname 和 $lastname生效了,因为他们是在当前的bash环境中执行的。
这也就是我们不注销系统而让设置生效可以使用source ~/.bashrc而不能使用 bash ~/.bashrc的原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值