一、编写一个shell脚本
1、编写脚本代码
(1)使用vi文本编辑器
使用命令:vi first.sh
(2)编辑内容
按i插入编辑:
cd /boot/
pwd
ls-lh vml*
cd /root
wq保存,ls确认当前目录(/root)有first.sh
2、赋予可执行权限
(1)使脚本具有可执行属性
[root@localhost ~]# ll first.sh (先查文件默认的权限)
[root@localhost ~]# chmod +x first.sh(+x前不写用户或组,默认所有人都给X权)
[root@localhost ~]# ls -l first.sh
3、执行脚本文件
- 方法一:脚本文件路径(若在当前位置,不能直接写文件名)
[root@localhost ~]# ./first.sh - 方法二:sh 脚本文件路径
[root@localhost ~]# sh ./first.sh - 方法三:source 脚本文件路径(先clear,再执行下列命令)
source ./first.sh
4、执行chmod –x first.sh,再运行下面命令,对比结果。
[root@localhost ~]# ./first.sh
(必须有x权限)
[root@localhost ~]# sh ./first.sh
[root@localhost ~]# source ./first.sh
(不要求x权限)
5、更完善的脚本构成
- 脚本声明
- 注释信息
- 可执行语句
[root@localhost ~]# vi ./first.sh
在里面插入以下内容
#!/bin/bash
#This is my first Shell-Script.
cd /boot
echo “当前的目录位于:”
pwd
echo “其中以vml开头的文件包括:”
ls -lh vml*
echo “回到本文件存放目录”
cd /root
wq保存退出再运行一次上述脚本,结果显示
二、重定向与管道操作
1、交互式硬件设备
2、重定向操作
3、管道操作符号“|”( 本例用的awk,为文本处理命令)
- 将左侧的命令输出结果,作为右侧命令的处理对象
- 格式:cmd1 | cmd2 [… | cmdn]
[root@localhost ~]# grep “bash$” /etc/passwd(先执行clear)
[root@localhost ~]# grep “bash$” /etc/passwd | awk -F: ‘{print $1,$7}’
可以看到,结果整理得干净多了
三、Shell变量的作用、类型
变量的作用
为灵活管理Linux系统提供特定参数,有两层意思:
- 变量名:使用固定的名称,由系统预设或用户定义
- 变量值:能够根据用户设置、系统环境的变化而变化
变量的类型
- 自定义变量:由用户自己定义、修改和使用
- 环境变量:由系统维护,用于设置工作环境
- 位置变量:通过命令行给脚本程序传递参数
- 预定义变量:Bash中内置的一类变量,不能直接修改
四、自定义变量
定义一个新的变量
- 格式:变量名=变量值
- 变量名以字母或下划线开头,区分大小写,建议全大写
查看变量的值
- 格式:echo $变量名
[root@localhost ~]# Product=PPT
[root@localhost ~]# Version=3.0
[root@localhost ~]# echo $Product
[root@localhost ~]# echo $Product $Version
赋值时可以使用引号,它们将有如以下意义
- 双引号:允许通过$符号引用其他变量值
如NEW=“WORD$Version”,将引用上面的变量,结果是WORD3.0
- 单引号:禁止引用其他变量值,$视为普通字符
当需要用 符号时。如 C A S H = ‘ U S 符号时。如CASH=‘US 符号时。如CASH=‘USIS’
- 反撇号:命令替换,提取命令执行后的输出结果
如EX=pgrep –U root | wc –l
,把命令结果赋给EX
从键盘输入内容变为变量赋值
格式: read [-p “提示信息”] 变量名
如read –p “请输入循环次数:” CISHU
设置变量的作用范围
- 格式1:export 变量名 … (已有的变量)
- 格式2: export 变量名=变量值 …(新定义的变量)
- —— 两种格式可以混合使用
[root@localhost ~]# echo “$Product $Version”
[root@localhost ~]# export Product Version
[root@localhost ~]# bash
(进入当前工作区的一个子环境,相当于副本)
[root@localhost ~]# echo “$Product $Version”
[root@localhost ~]# echo “$EX $CISHU“ (它们则没结果)
[root@localhost ~]# exit
(回到主工作区)
[root@localhost ~]# echo “$EX $CISHU“
整数变量的运算
格式:expr 变量1 运算符 变量2 [运算符 变量3] …
常用运算符
- 加法运算:+
例:echo $EX $CISHU
AK=expr $EX + $CISHU
(假定read 时输入15)
echo $AK - 减法运算: -
例AK=expr $EX - $CISHU
echo $AK - 乘法运算: *
例AK=expr $EX \* $CISHU
echo $AK - 除法运算: /
例AK=expr $EX / $CISHU
echo $AK - 求模(取余)运算: %
例AK=expr $EX % $CISHU
echo $AK
五、特殊的shell变量
环境变量
- 由系统提前创建,用来设置用户的工作环境
- 配置文件: /etc/profile、~/.bash_profile
常见的环境变量
- PWD、PATH
- USER 、LOGNAME、UID、SHELL、HOME
- PS1、$PS2
[root@localhost ~]# echo $PATH
[root@localhost ~]# PATH=“$PATH:/root” (添加一下新路径/root)
[root@localhost ~]# echo $PATH
位置变量
表示为 n , n 为 1 9 之间的数字 , 超过 9 则用 n,n为1~9之间的数字,超过9则用 n,n为1 9之间的数字,超过9则用{n}
[root@localhost ~]# ./myprog.sh one($1,第一个位置参数) two($2,第二个位置参数) three four five six($2,第六个位置参数)
[root@localhost ~]# cat myprog.sh
echo “字母表第5个字母是:” $5
echo “字母表第18个字母是:” ${18}
[root@localhost ~]# sh myprog.sh {a…z}
字母表第5个字母是:e
字母表第18个字母是:r
预定义变量
[root@localhost ~]# cat mybak.sh
#!/bin/bash
TARFILE=beifen-date +%Y%m%d
.tgz
tar zcf $TARFILE $* &> /dev/null
echo “已执行 $0 脚本,”
echo “共完成 $# 个对象的备份”
echo “具体内容包括: $*”
[root@localhost ~]# sh mybak.sh /etc/passwd /etc/shadow
[root@localhost ~]# ls *.tgz
脚本应用思路
- 确定命令操作(设计并执行任务)
- 编写Shell脚本(组织任务过程)
- 设置计划任务(控制时间,调用任务脚本)
六、练习
练习1
编写脚本程序welcome.sh
验证登录时的欢迎效果
练习2
编写脚本程序status、start、stop
使用上述脚本来控制系统服务