shell
???????????????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之间的内容输入重定向到cat,cat再输出重定向给/etc/yum.repos.d/yum/repo文件 ? shell脚本循环语句 一 for 循环语句 ??格式: for 变量名 ?in ?取值列表 ?????????do 循环体 done 结束 列如:
循环取值的过程:in后边是取值范围,in将后边的值一个一个负值给变量i,负值一次i就进入do和doen之间的循环体循环一次,循环完毕自动返回,让i去取下一个值,直到没有了整个结束。 ?也可以已命令方式,但命令必须用反引号括起来优先执行,in在一个一个的去取值......在交给i 输出
??| xargs 是将root下的目录文件以横排显示也是将分行符n转换为空格 (1)变种的for 循环 ???(1)格式: ?for ((i=0;i<10;i++)) do 双括号是支持c++语言i=0是i的 echo $i ??????初始变量=0,i<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表示函数(function、return可以不写) 格式: function 函数名(){ 命令序列 [return x] } ? 函数名 函数体只有被调用时才会启动,若要重复启动该函数,只需将函数名重复制一遍,复制几遍就启动几次
源码编译示意
? 四种循环控制语句:break ?contiue ?exit ?rotun exit 强行终止
break:达到条件时跳出当前循环,但不终止脚本,会进入当前循环以外的或下一个循环(break只跳出当前离它最近的内侧循环)
continue :终止当前本次循环进入下次循环,直到循环完当前循环的条件,在跳出循环,当没有条件的时候会在当前无限循环
rotun:是用在函数里的作为函数的返回值,用于判断函数执行是否正确。和exit一样,如果函数里有循环碰到它也会跳出整个函数体,会从哪调用的函数就从哪继续
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |