加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

shell

发布时间:2020-12-15 23:16:12 所属栏目:安全 来源:网络整理
导读:???????????????Shell 脚本编程 ----- 编程范围与变量 ? 一. 脚本文件名的结尾必须加 .sh (1)? 写脚本内容是开头必须加 ?#!/bin/bash (2)? 执行脚本命令: bash yunjisuan.sh 或 sh yunjisuan.sh ( 也可以 以绝对路径的方式执行脚本 /root/xxx/yunjisuan.sh

???????????????Shell 脚本编程 -----编程范围与变量

?

一.脚本文件名的结尾必须加.sh

(1)?写脚本内容是开头必须加?#!/bin/bash

(2)?执行脚本命令:bash yunjisuan.sh sh yunjisuan.sh (也可以 以绝对路径的方式执行脚本 /root/xxx/yunjisuan.sh ??但前提必须点给yunjisuan.sh 脚本加x执行全限 chmod +x yunjisuan.sh)

(3)?我们在写脚本的时候里面的命令行必须都是免交户的列如下图

?

二.Shell脚本的意义:

??Shell脚本的意义在于,通过命令行解析的方式帮我们自动去执行我们设定好的命令代码。

??假如我们把脚本挂到定时任务里,那就是自动在某个没有人的时间里自动执行脚本里的命令代码(也就是自动化脚本)

??脚本虽然能帮我们自动执行,但是脚本的局限性是很大的,假如我们要去/根下清空某个目录,但没有这个目录,脚本也去执行,但它执行的是在根/下执行这条命令 /]#rm -rf * 就完了! 因此我们在写脚本 指定目标路径前加个命令test来判断有没有这个文件或目录(test -d 是判断目录 ?test -f 是判断文件)

列如下图:

?

?

?我们也可以用[ ?] 这个符号进行条件测试真jia

列如下图

?

[ ?] 括号里面两边必须加空格判断数值时==号两边也要加空格,(这条命令的意思时xx的值对就数出0 错就输出1-gt grep than)是大于 ?-lt ?(less than)是小于 ?==两个等于是判断 eq是等于 ??!=就是取反不等于 ?-ge 是大于等于 ?-le是小于等于

?

???????-z 判断字符串是否是空

?

逻辑或只能出现一个在最右边,有了逻辑或后边就不能有逻辑与了,luo

?

以上总结

?

脚本交户形式

(1)read “?”?交户 模式 让用户输入

列如下图:

?

?

创建用户脚本

#!/bin/bash

?

User="yunjisuan"

Passwd="123456"

read -p "请输入用户名" user

read -p "请输入密码" passwd

[ $User -eq $user ] && echo "YOU ARE RIGHT" || echo YOU ARE WRONG

[ $Passwd -eq $user ] && echo "YOU ARE RIGHT" || echo "YOU ARE WRONG"

?

?

?

??read -p”文本提示”?num变量 ?让用户输入内容复值到num的变量里

三.基本条件逻辑语:

???if [ 如果什么 ]

???then 那么,干啥

???elif 否则如果

???else 否则

???exit 强行终止

???if结束

??列如:

?

?

yum 仓库脚本

(1)移除光盘,再挂载

(2)判断光盘挂载

(3)挂载本地yum仓库脚本

(4)判断一级目录、二级目录是否存在

配置文件手动生成,避免之前被修改过(重定向或echo -e

?

?

配置文件手动生成

用脚本手动生成配置文件,一般用重定向

输入重定向通过FOF标识(任意定义,但成对出现),将FOF之间的内容输入重定向到catcat再输出重定向给/etc/yum.repos.d/yum/repo文件

?

shell脚本循环语句

for 循环语句

??格式: for 变量名 ?in ?取值列表

?????????do

循环体

done 结束

列如:

?

循环取值的过程:in后边是取值范围,in将后边的值一个一个负值给变量i,负值一次i就进入dodoen之间的循环体循环一次,循环完毕自动返回,让i去取下一个值,直到没有了整个结束。

?也可以已命令方式,但命令必须用反引号括起来优先执行,in在一个一个的去取值......在交给i 输出

?

??| xargs 是将root下的目录文件以横排显示也是将分行符n转换为空格

(1)变种的for 循环

???1)格式: ?for ((i=0;i<10;i++))

do 双括号是支持c++语言i=0i

echo $i ??????初始变量=0i<10是条件范围,i++就是

doen ???????????????????????i=i+1 没次输出完都执行i++直到超出

???????????????????????????条件范围跳出循环,不加i<10条件就会无 ??????????????????? 限输出

?

格式二: h=0

?????????for ?i in {1..10}

?????????do

???????????????echo $h

???let h++

?????????done

自动找出本网段内存活的IP地址的脚本

写法:

一般都用ping -c 1 ?是只ping一次

?

?

while脚本循环

(1)?格式:

while 条件

do

循环体(指令)

done

read -p “用户输入:”?i ??(也可以写i=0

while [ $i -lt 10 ] ????是条件为真继续循环条件为假跳出循环

do ????????????????while : 不写条件就是永招 无限循环

echo $i

let i++ ????????let 是让shell 支持 i++

done

??while循环主要是弥补for循环没有无限循环的格式用的

Case语句

用途:菜单;启动脚本

case语句适合变量的值少,且为固定的数字或字符串集合。 系统服务启动脚本传参的判断多用case语句

格式:

case?"字符串变量" in

????1

????????指令1

????????;;

????2

????????指令2

????????;;

????*)

????????指令

esac

服务脚本框架

??vim case.sh ?

#!/bin/bash

. /etc/init.d/functions

case $1 in

????????start)

????????????????action "服务开始启动" ??/bin/true

????????????????;;

????????stop)

????????????????action "服务准备停止" ??/bin/false

????????????????;;

????????restart)

????????????????action "服务准备停止" ??/bin/true

????????????????action "服务来时启动" ??/bin/true

????????????????;;

????????*)

????????????????echo "请输入正确参数"

????????????????;;

esac

?

在当前脚本引用函数库(绝对路径)

Function对应的是action “?”?路径

/bin/true 表示一个标志

?

?

?

设置脚本配置启动级别

(1)为脚本设置启动级别

将脚本cp/etc/init.d/下,vim编辑/etc/init.d/cash.sh脚本

在脚本的第二行加# chkconfig: 35 90 10

?

(2)chkconfig中添加脚本

# chkconfig --add case.sh

# chkconfig --list case.sh

?

(3)设置关闭cash.sh

# chkconfig case.sh off

?

?

shell 函数

不论什么编程语言,基本只有三种编程方法

1.?面向过程

2.?面向对象

3.?函数式编程

?这三种模式,并不是语法,而是我们如何去编写代码的方法论。

shell这种语言里,只能支持面向过程这种编程方法。

过程就是按照一定顺序进行代码的编写,不能跳步这就是过程。

shell中,function表示函数(functionreturn可以不写)

格式:

function 函数名(){

命令序列

[return x]

}

?

函数名

函数体只有被调用时才会启动,若要重复启动该函数,只需将函数名重复制一遍,复制几遍就启动几次

?

?

?

?

源码编译示意

?

?

四种循环控制语句break ?contiue ?exit ?rotun

exit 强行终止

?

?

break达到条件时跳出当前循环,但不终止脚本,会进入当前循环以外的或下一个循环(break只跳出当前离它最近的内侧循环)

?

?

continue 终止当前本次循环进入下次循环,直到循环完当前循环的条件,在跳出循环,当没有条件的时候会在当前无限循环

?

?

rotun是用在函数里的作为函数的返回值,用于判断函数执行是否正确。和exit一样,如果函数里有循环碰到它也会跳出整个函数体,会从哪调用的函数就从哪继续

?

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读