ENGINEER1.4
SHELL脚本基础
认识shell环境
bash shell的使用方式
交互式:
--人工干预,智能化程度高
--逐条解释执行,效率低
非交互式:
--需要提前设计,智能化难度大;
--批量执行,效率高;
--方便在后台及悄悄地执行;
什么是shell脚本:提前设计可执行语句,用来完成特定任务的文件
--解释型程序
--顺序,批量执行
规范shell脚本的一般组成:
#!环境声明
#注释文本
可执行代码
----------------------------------------------------------------------------------------------------------------------------------
例1:
编写helloworld.sh问候脚本
编写脚本代码:
#vim /root/helloworld.sh
#!/bin/bash
echo “hello world”
添加x执行权限
#chmod +x /root/helloworld.sh
运行脚本测试
#/root/helloworld.sh
例2:
编写系统信息报告脚本
编写脚本代码:
#vim /root/1.sh
#!/bin/bash
cat /etc/redhat-release
uname -r
hostname
2.添加x执行权限
# chmod +x /root/1.sh
3.运行脚本测试:
#/root/1.sh
--------------------------------------------------------------------------------------------------------------------------------------
简单脚本技巧
重定向输出的应用
>:只收集正确 2>:只收集错误 &>:全部收集
本例要求编写一个脚本 /root/out.sh,功能特性如下:
执行此脚本显示 I love study !!
执行 /root/out.sh 2> err.log 应该没有显示,但是查看 err.log 文件的内容为 I love study !!
步骤:
#vim /root/out.sh
#!/bin/bash
#echo "i love study!!" >&2
#chmod -x /root/out.sh
#/root/out.sh
#/root/out.sh 2>err.log
#cat err.log
----------------------------------------------------------------------------------------------------------------------------------------
变量的定义及使用
以不变的名称存放可能变化的值
引用变量值:$变量名 以{}界定易混淆名称
变量的种类:
根据变量的用途不同区分:
环境变量:变量名一般都大写,用来设置用户,系统环境 (PATH)
位置变量:bash内置,存储内置脚本时提供的命令行参数 $n ,n为序号 $1 $2 ...${10}
预定义变量:bash内置,可直接调用的特殊值,不能直接修改
$#:已加载的位置变量的个数 $*:所有位置变量的值 $?:程序退出后的状态值,0表示正常,其他异常
自定义变量:用户自主设计,修改和使用
例:
要求编写一个脚本 /root/myhead,功能特性如下:
此脚本可接收2个位置参数,能够按照下列格式执行
此脚本执行后,能显示“你一共提供了 $# 个参数”,然后在下一行显示“文件 $1 的前 $2 行: ”,紧跟下一行开始输出对应文件的前几行内容
步骤一:编写 /root/myuseradd 添加用户的脚本
#vim /root/myuseradd
#!/bin/bash
echo “一共提供了$#个参数”
echo "用户名是$1,密码是$2 "
useradd $1
echo "$2" | passwd --stdin $1
二.添加执行权限
#chmod -x /root/myuseradd.sh
----------------------------------------------------------------------------------------------------------------------------------------------
常用测试选项:
文件状态检测 -f、-d、-e、-r、-w、-x
整数值比较 -gt、-ge、-eq、-ne、-lt、-le
字符串比较 ==、!=
取反操作 !
多分支if选择结构:
if 条件测试操作1 then命令序列1
elif 条件测试操作2 then命令序列2
else 命令序列3
fi
例:
本例要求在虚拟机 server0 上创建 /root/foo.sh 脚本,任务目标如下:
当运行/root/foo.sh redhat,输出为fedora
当运行/root/foo.sh fedora,输出为redhat
当没有任何参数或者参数不是 redhat 或者 fedora时,其错误输出产生以下信息: /root/foo.sh redhat|fedora
1)编写脚本代码
[root@server0 ~]# vim /root/foo.sh
#!/bin/bash
if [ "$1" = "redhat" ]
then
echo "fedora"
elif [ "$1" = "fedora" ]
then
echo "redhat"
else
echo "/root/foo.sh redhat|fedora" >&2
fi
2)添加x执行权限
[root@server0 ~]# chmod +x /root/foo.sh
步骤二:测试foo.sh判断脚本
1)测试提供正确参数的情况
[root@server0 ~]# /root/foo.sh redhat fedora
[root@server0 ~]# /root/foo.sh fedora Redhat
2)测试提供非预期参数的情况
[root@server0 ~]# /root/foo.sh ubuntu
/root/foo.sh redhat|fedora
3)测试不提供参数的情况
[root@server0 ~]# /root/foo.sh
/root/foo.sh redhat|fedora
本文出自 “Linux运维之道” 博客,请务必保留此出处http://13401400.blog.51cto.com/13391400/1979741
Linux运维之道之ENGINEER1.4(shell脚本基础)
原文地址:http://13401400.blog.51cto.com/13391400/1979741