当前位置:网站首页 > 黑客培训 > 正文

【学员笔记】LINUX随堂笔记(七):shell脚本编程

freebuffreebuf 2019-11-20 294 0

本文来源:zltjwsys

今天继续给大家分享Linux笔记,学习是不断地积累以及变成自己的东西,光看笔记也没用哦,记得要多实践!再给大家讲一讲,知了堂信安新班12月开班,感兴趣的欢迎私信,还有活动哦。

v2-cbc22948fe4f88c2fa26d343e8b88580_hd.j

第8章 shell脚本编程

一. shell简介

当命令不在命令行中执行,而是从一个文件中执行时,该文件就称为 Shell 脚本。shell脚本是纯文本文件,以行为单位逐行执行。

相当于一种命令翻译器。

二. shell脚本的编写

2.1脚本的创建

使用文本编辑器(或touch)创建脚本文件

语法:touch a.sh

2.2脚本的执行

将脚本添加可执行权限

语法:chmod +x a.sh

执行脚本命令:

(1)./a.sh

(2)sh a.sh

(3)source a.sh //不需要x权限

2.3脚本的编写

编辑脚本:vim a.sh

#!/bin/bash //系统以bash解释器执行脚本

cd /etc/

pwd //命令语句

三. shell功能

3.1重定向

重定向输出:将命令的执行结果覆盖到目标文件

语法:df > a.txt //将磁盘信息覆盖到a.txt文件

重定向追加:uname -p >> a.txt //将处理器类型追加到a.txt

重定向输入:

vim pass.txt

123456

passwd --stdin jerry pass.txt //标准输入

tail -2 /etc/shadow //查看用户密码信息后两行

3.2管道符号

将左侧的命令输出结果,作为右侧命令的处理对象

cat a.txt |grep “123” //筛选出含字符串“123”的行

grep "bash$" /etc/passwd | awk -F: '{ print $1,$7 }' //-F:后要求有空格

例:提取根分区/的磁盘使用情况

df -hT //查看磁盘使用情况-h显示更易读-T显示文件系统类型

df -hT | grep "/$" | awk '{print $6}'

四. shell变量

shell变量用来存放系统和用户需要使用的特定参数(值),而且这些参数可以根据用户的设定或系统环境的变化而相应变化。

4.1自定义变量

4.1.1定义一个新的变量(输入)

格式:变量名=变量值

4.1.2查看变量的值(输出)

格式:echo $变量名

echo命令的选项:

-n:取消自动换行

-e:使用转义字符,把字符串中某些字符当成特殊字符处理

\t:制表符

\n:换行符

\b:删除前一个字符

\f:换行但光标仍旧停留在原来的位置

\r:光标移至行首,但不换行

赋值时使用引号

双引号:允许通过$符号引用其他变量值

单引号:禁止引用其他变量值,$视为普通字符

反撇号:命令替换,提取命令执行后的输出结果

4.1.3从键盘输入内容为变量赋值(提示输入)

格式: read [-p "提示信息"] 变量名

4.2整数变量运算

Shell变量的数值运算多用于脚本程序的过程控制,只能进行整数运算,不支持小数 运算。整数的运算主要通过内部命令Expr进行。

格式:expr 变量1 运算符 变量2 [运算符 变量3]... //注意空格

常用运算符:加(+)、减(-)、乘(\*)、除(/)、取模(%)

例:设置X(值为35)、Y(值为16)两个变量,并进行加、减、乘、除、取模运算

X=35

Y=16

expr $X + $Y

expr $X - $Y

expr $X \* $Y //乘法符号在shell中有其它含义,运算时需要转意符号

expr $X / $Y

expr $X % $Y

4.3环境变量

由系统提前创建,用来设置用户的工作环境

配置文件:/etc/profile 、~/.bash_profile

env :查看当前工作环境下的环境变量。

这表示为 $n,n为1~9之间的数字

例:编写一个加法运算的小脚本a.sh,用来计算两个整数的和。需要计算的两个整数在执行脚本时以位置变量的形式提供。

#vim a.sh

#!/bin/bash

SUM=`expr $1 + $2`

echo "$1 + $2 = $SUM"

#chmod +x a.sh

#./a.sh 12 24 //$1为12、$2为24

4.4预定义变量

是由Bash程序预先定义好的一类特殊变量,使用"$"符号和另一个符号组合表示。

$# :命令行中位置变量的个数

$* :所有位置变量的内容

$? :表示上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错

$0 :当前执行的进程/程序名

例:编写一个备份小脚本

#vim mybak.sh

#!/bin/bash

TARFILE=beifen-`date +%s`.tgz

tar zcf $TARFILE $* then

echo "恭喜你答对了,实际价格是$PRICE"

echo "你总共猜测了$TIMES次"

exit 0

elif [ $INT -gt $PRICE ] ; then

echo "太高了!"

else

echo "太低了!"

fi

done

chmod +x pricegame.sh

./pricegame.sh

九. case分支语句

针对变量的不同取值,分别执行不同的命令序列

用法:

case 变量值 in

模式1)

命令序列1

;;

模式2)

命令序列2

;;

......

*)

默认命令序列

esac

例:检查用户输入的字符类型

提示用户从键盘输入一个字符,通过case语句判断该字符是否为字母、数字或者其他控制字符,并给出相应的提示信息。

#vim hitkey.sh

#!/bin/bash

read -p "请输入一个字符,并按Enter键确认:" KEY

case "$KEY" in

[a-z] || [A-Z])

echo "你输入的是 字母."

;;

[0-9])

echo "你输入的是 数字."

;;

*)

echo "你输入的是 空格、功能键或其他控制字符."

esac

chmod -x hitkey.sh

./hitkey.sh

十. sed、awk语句

10.1 Sed简介

sed是stream editor(流编辑器)的缩写,是一种在线编辑器,它一次处理一行内容。sed是非交互式的编辑器。

处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

10.2 Sed命令用法

格式:sed+[选项]+‘命令’+文件名

常用选项:

-n :取消默认输入

-e :多项编辑

-i :直接修改读取的档案内容,而不是由屏幕输出

常用命令:

a\ :当前行后添加行

i\ :当前行前添加行

c\ :用字符串替换行

d :删除行

p :打印行

s :用一个字符串替换另一个

w :将所选的行写入文件

10.3 Sed定址

用于‘命令’之前,决定对哪些行进行编辑。

如果没有指定地址,sed将处理输入文件的所有行。

1.地址是一个数字,则表示行号;是“$"符号,则表示最后一行。

2.地址可以指定范围,当需指定范围时使用逗号(,)隔开。

10.4 Sed用法

1.p命令

格式:sed -n ‘行号p’ 文件名

2.d命令

格式:sed -n ‘行号d’ 文件名

3.s命令

格式:sed -n ‘行号s/a/b/g’文件名

将文件中指定行里所有的a字符替换为b字符,g为全局变量

4.i命令

格式:sed -i ‘行号3d’文件名

直接修改文件内容,不打印在屏幕上

5.e命令

格式:sed -e ‘3d’ -e ‘4p’ 文件名

先删除第三行,再打印第四行字符

10.5 awk简介

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。

简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

10.6 awk用法

1.格式:awk ' pattern {action} '

pattern常指关系表达式,例如:

awk‘/a/’file——显示文件中包含a的行

awk‘$2>10’file——显示第二列中数字大于10的行

2. 分隔提取:awk –F“分隔符”‘{print $1}’

例如:

awk –F.‘{print $1, print $2}’表示以点为分隔符将每一行的前二个字段,分行输出

10.7 awk实例

判定输入ip的有效性:

vim a.sh

#!/bin/bash

read -p “请输入ip:” A

B=`echo $A |awk -F. “{print $1}”`

if [ $B -le 0 ] || [ $B -gt 255 ]

then echo “请输入正确的IP”

else

echo “ok”

fi

chmod +x a.sh

sh a.sh

十一. shell实例

例1:编写一个系统服务脚本

vim myprog

#!/bin/bash

case "$1" in

start)

echo -n "正在启动sleep服务..."

if sleep 7200 ;

stop)

echo -n "正在停止sleep服务..."

pkill "sleep" ;

status)

if pgerp "sleep"

then

echo "sleep服务已经启动."

else

echo "sleep服务已经停止."

fi

;;

restart)

$0 stop

$0 start

;;

esac

chmod +x myprog

./myprog start

例2: shell打印九九乘法表

使用for循环

for i in $(seq 1 9)

do

for j in $(seq 1 $i)

do

echo -n “$j * $i” = $[i * j] “ ”

done

echo

done

//例中$[i * j]可写为:$((i * j))、$[$j*$i]、$(( $j * $i ))、`expr $i \* $j`

//修改:第二个do下加一行 let “temp = i * j”,再把$[i * j]改为:$temp

while 反向的乘法表:

i=9

j=1

while ((i>=1))

do

while ((j=i))

do

echo -n “$j * $i”=$[$j * $i] “ ”

let j++

done

len j=1

let i--

echo “”

done

----------------------------------------------end------------------------------------------------

今天的笔记就分享到这里,如果你觉得自己的学习方法有问题,或者还有啥想知道的,都可以告诉我哟~

v2-be7b3a919d240f369cef3d85db776fa7_hd.j


转载请注明来自网盾网络安全培训,本文标题:《【学员笔记】LINUX随堂笔记(七):shell脚本编程》

标签:linux学习笔记随堂

关于我

欢迎关注微信公众号

关于我们

网络安全培训,黑客培训,渗透培训,ctf,攻防

标签列表