shell
Posted yixin666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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下的目录文件以横排显示也是将分行符 转换为空格
(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一样,如果函数里有循环碰到它也会跳出整个函数体,会从哪调用的函数就从哪继续
以上是关于shell的主要内容,如果未能解决你的问题,请参考以下文章