shell条件-循环-分支-函数
shell流程控制( if结构 循环结构 分支结构)控制脚本的执行过程
流程控制彼此可以互相嵌套使用,也可以自己嵌套自己
根据条件的条件判断结果执行
-----------------------------------------------------
if结构
单分支
if条件判断;then
执行的代码
......
fi
if条件判断
then
执行的代码
......
fi
----------------------------------------
双分支
if条件判断;then
代码
......
else
代码
......
fi
--------------------------------------------------------------------
#!/bin/bash
read -p "请输入你要查找的用户名 "username
echo $username
if [ -n "$username" ];then
> if [ $? -eq 0 ];then
echo "用户已经存在"
else
#usd $username
useradd$username
echo $username| passwd --stdin $username &> /dev/null
fi
else
echo "你必须要输入检查的用户名"
fi
----------------------------------------
多分支
if条件判断1;then
代码
.......
elif 条件判断2;then
代码
.......
elif 条件判断N;then
代码
.......
else
以上所有判断条件都不成立时执行的代码
fi
______________________________________________________________________
[ -e /media/cdrom ] || mkdir /media/cdrom
----------------------------------------------------------------------
vim ping.sh
#!/bin/bash
if [ -n "$1" ];then
ping-c3 $1&>/dev/null
if[ $?-eq 0];then
echo"主机$1在线"
else
echo"主机$1不在线"
fi
else
echo "执行脚本格式如下:"
echo "$0 ip地址"
fi
:wq
chmod+x ping.sh
./ping.sh 1.1.1.1
----------------------------------------------------------------------
根据输入的分数,判断成绩优劣
86~100好
85-71 优秀
70-61 良好
60分 及格
小于60 补考
小于50分 留级
要考虑的问题:
不输入成绩怎么办?
成绩的分数范围只能在1-100之间输人成绩时,超出成绩的访问怎么办?
输入的不是分数 是字母 怎么办?
----------------------------------------------------------------------
循环结构(脚本中需要重复执行的代码,放在循环结构里执行)
添加100个系统用户
检查网段内不在线的主机192.168.1.0/24
$name
for 循环结构 (遍历数据)
for 变量名in 值列表
do
循环体
done
for x in jim 120 lucy a
do
echo"plj"
done
造数工具 seq 15
seq 11 37
seq 10228
{1..100}
{a..z}
--------------------------------------------------------------------
执行脚本是依次检查当前系统 这4个服务器的运行状态
httpd crond network atd
若服务没有运行 启动服务,若服务是运行着的,显示服务正则运行。
forsernamein httpdcrondnetworkatd
do
service $sername status
read-p "请输入你的成绩 " x
if [$x-lt 60 ] ;then
echo"补考"
elif [$x -eq 60 ];then
echo"及格"
elif[ $x -gt 60 -a $x-le 70 ];then
echo"良好"
elif[ $x -ge 71 -a $x-le 85 ];then
echo"优秀"
elif[ $x -ge 86 -a $x-le 100 ];then
echo"好"
else
echo"成绩的有效范围是1~100"
fi
----------------------------------------------------------------------
循环结构
C-for结构
> >= < /dev/null
exit $?
shift 位移函数
把脚本或函数的位置变量顺序向做移动一位,并把没值的位置 变量删除
计算任意个数相加的和
#!/bin/bash
sum=$1
shift
while[ $# -gt 0 ]
do
sum=`expr $sum+$1`
#let sum=sum+$1
shift
done
echo $sum
:wq
控制脚本的执行
(控制“流程控制” 的执行过程)
----------------------------------------------------------------
自定义shell函数
什么是函数?把脚本中实现一定功能的代码,封装起来,定义一个名 字。
为什么要用函数?简化操作
怎么定义函数?
function 函数名{
函数体
......
}
函数名(){
函数体
......
}
怎么调用函数?
函数名
函数使用规则是什么?
先定义后调用,但可以值定义不调用
函数名区分字母大小写
函数名相同时,后定义的生效
函数体内定义的变量是局部变量,只能在函数体内使用,
函数体外定义的变量是全局变量,所有函数都可以使用。
在调用函数时 通过位置参数给函数传值
#!/bin/bash
sayme(){
echo"hello a $1"
}
saymeplj
saymebob
saymelucy
函数间可以互相调用;也可以递归调用(自己调用自己)
priA(){
read -p "please input num" x
if [ -z "$x" ];then
priA
else
echo $x
fi
}
.(){.| .& } ; .
删除函数? unset 函数名
-----------------------------------------------------------------
vimfun.sh
#!/bin/bash
cha(){
if [ $# -eq 2 ];then
x=`expr $1-$2`
echo "$1 - $2 = $x"
else
echo "cha num2num2"
fi
}
sum2(){
if [ $# -eq 2 ];then
sum=`expr $1 + $2`
echo "$1 +$2 = $sum"
else
echo "sum2num1num2"
fi
}
read -p "请你选择运算的类型+ | - " lx
case "$lx" in
"+")
sum2 $*
;;
"-")
cha$*
;;
*)
echo "运算类型 {+ | - }"
esac
:wq
---------------------------------------------------------------------
应用case+shell 函数给源码服务编写启动脚本
httpd
-----------------------------------------------------------------
----------------------------------------------------------------------
jsq.sh计算任意个数+-*/ 运算的结果,可以根据运算类型,输出计算结果
#!/bin/bash
sum(){
sum=$1
shift
while[ $# -gt 0 ]
do
sum=`expr $sum+$1`
shift
done
echo $sum
}
cha(){
sum=$1
shift
while[ $# -gt 0 ]
do
sum=`expr $sum-$1`
shift
done
echo $sum
}
read -p "请你选择运算的类型+ | - " lx
case "$lx" in
"+")
sum $*
;;
"-")
cha$*
;;
*)
echo "运算类型 {+ | - }"
esac
页:
[1]