Shell脚本02 详解
一,总结shell脚本用法
1,两种命令激活脚本
(1): sh
(2): /bin/bash
2,创建目录,在这个目录里创建shell脚本
Mkdir –p /service/script
3,以绝对路径来激活
在/service/script目录下创建一个ctw.sh文件
首先给ctw.sh 加X权限 chmod +x ctw.sh
再用/service/script/ctw.sh 来激活脚本
4,vim ctw.sh文件后内输入
(1) #!/bin/bash
Useradd test1 :添加一个test1用户
Passwd echo “123456” | passwd –stdin test1
:给新添加的用户 test1设置密码 123456
(2)怎么查看我新添加的用户呢?
Tail /etc/passwd 查看新添加的用户
(tail尾部动态信息)
Tail /etc/shadow 查看密码设置
5,test 这个命令可以判断是目录还是文件
#:test –d /root
:没反应
#:echo $? :→→→→查看上级是否成功
# :0 :→→→→0是成功 1是失败
-d 是判断root是不是目录
-f 是判断是不是文件
-e判断目标是否存在
-z 判断字符串是否是空
6,[ ] 中括号是开启判断条件。
#:xx=44
#: [ $xx == 44 ] $$ echo “0” || echo “1”
判断中括号内xx是否等于44。$$(与)是就输出“0”否则输出1
7,应用在[] 中括号内的基本符号
-gt 大于 -ge大于等于 ==等于 -lt小于 -le小于等于
-ne不等于 -eq等于 !=不等于 -a 并且
|| 逻辑或(否则) $$逻辑与
Set nu 显示行号 (在vim中末尾使用)
二,交互输入
1, read 让用户输入数据
如:vim ctw.sh
#!/bin/bash
Read –p “请用户输入一个数字”
2, 符号解释
#: vim ctw.sh →→→→ #:/service/script/ctw.sh 99 88
#!/bin/bash
echo $# →→→→ 2 :$#参数数量有99和88两个参数
echo $* →→→→ 99 88 :$*罗列所有参数横排
echo $0 →→→→ /service/script/ctw.sh $0:路径
取得脚本的本行路径
echo $1 →→→→ 99 :参数1
echo $2 →→→→ 88 :参数2
3,求变量的位数
#:xx=“123” #:xx=“123456”
#:echo ${#xx} 回车 #:echo ${#xx} 回车
: 3 : 6
4,条件判断 单分支条件判断语句
(1) If (如果) 条件1(成立);then (那么)
echo(动作1)
fi (结束) 有开始必须有结尾
(2)exit 强制终止 elif 否则如果 -e识别\n换行符
(3)#!/bin/bash
Read –p “请用户输入一个数字: ”
If [ $ctw –eq 60 ];then
Echo “及格”
Elif [ $ctw –lt 60 ];then
Echo “不及格”
Elif [ $ctw –le 80 ];then
Echo “良”
Elif [ $ctw –lt 100 ];then
Echo “优”
Elif [ $ctw –eq 100 ];then
Echo “优秀”
Else
Echo “作弊”
Fi
(4)搭建yum仓库
#!/bin/bash
Umount /dev/sro 先卸载光盘(有没有都先卸)
[ -d /media/cdrom ] || mkdir –p /media/cdrom
查看有没有这个目录,没有就建一个
Mount /dev/sro /media/cdrom 挂载光盘
If [ $? -ne 0 ];then
Echo “请插入光盘”
Exit 强制终止
Fi
[ -d /etc/yum.repos.d ] || mkdir –p /etc/yum.repos.d
Cd /etc/yum.repos.d
Mv * /tmp/
cat > /etc/yum.repos.d/yum.repo <<FOF
[local]
name=local
baseurl=file:///media/cdrom
gpgcheck=0
enabled=1
FOF
yum -y clean all
yum makecache
[ $? -eq 0 ] && echo "yum仓库搭建完毕" || echo ”缓存建立失败”
三, for和while 两种循环语句
1, for 的三种取值
(1)#!/bin/bash
For I in 1 3 5 7 9 in 取值范围
Do I 被符的值,1 3 5 7 9
d
#: sh ctw.sh
1
3
5
7
9
(2)for I in {1..10} #: sh ctw.sh
Do 1
Echo $I 2
Done :
10
(3)for I in `ls /root | xargs`
Do
Echo $I
Done (结束)
2,还有两种写法但不属于正则的shell语言
(1)c 语言的循环
(()) 两个括号代表启动c语言
For ((i=0; i<10; i++))
Do
Echo $i
Done
(2) #!/bin/bash
H=0
For I in {1..10}
Do
Echo $h
((H++)) 或 let H++
Done
(3)例题
找出哪个网段是活的?
#!/bin/bash
For ip in 192.168.200.{1..254}
Do
Ping –c 1 $ip :ping网段 –c 1 只ping一次
If [ $? –eq 0 ] ;then
Echo “$ip活的”
Fi
Done
3.while 循环
#!/bin/bash
Read –p “输入 “ I :让用户输入I是几
While [ $I –lt 10 ]
Do
Echo $I
Let I++
Done
四, case
Case完全可以用if来代表只是特殊请款下,写一个菜单或启动的服务脚本,用case是最合适的,看起来清晰简单。
#: vim ctw.sh
#!/bin/bash
Case $1 in
Start)
Echo “开始服务”
;;
Stop)
Echo “服务准备停止”
;;
Restart)
Echo “服务准备停止”
Echo “服务开始启动”
;;
*)
Echo “请输入正确参数”
Esac (总结尾)
详细解释: $1 是变量也是参数1
In是取值 但在case里是对比
怎么对比呢?
Start) 如果$1 是这个值start
那么 echo “服务开始启动” 就输出这句。