初识Shell②
三、变量的类型
自定义变量
定义:变量名称=值
[root@localhost ~]# stuName=xiaoli
[root@localhost ~]# echo $stuName
xiaoli
变量名称命名规范:
变量名由数字、字母、下划线组成,不能以数字开头
变量名不能有空格且赋值符号前后不能有空格
不能使用关键字命名
变量名不能使用标点符号
变量名应有意义
驼峰命名法:
小驼峰:第一个单词以小写字母开始,第二个往后首字母大写
大驼峰:第一个单词首字母也大写
引用变量:
$变量名
${变量名}
查看变量: echo $变量名 set(所有变量,包括自定义变量和环境变量)
取消变量: unset 变量名 仅在当前shell中生效
作用范围: 仅在当前shell中生效
环境变量
环境变量:
shell在开始执行时旧已经定义好的
env 查看所有环境变量
set 查看所有变量
export 到处变量(作用范围)
临时生效
[root@xa2404 tmp]# IPADDR=192.168.11.128
[root@xa2404 tmp]# echo $IPADDR
192.168.11.128
永久生效
写到4个登陆脚本中 ~/.bashrc ~/profile
更好放在/etc/profile.d/* 下建立独立的环境变量配置文件
常用环境变量:USER UID HOME HOSTNAME PWD PS1 PATH
PATH:存储所有命令所在的路径
练习1
编写一个shell脚本,用于搜集其执行主机的信息,打印结果如下:
[root@tiger tmp]# ./test.sh
2012年 05月 24日 星期四 17:07:45 CST
当前的用户为 root
当前用户的宿主目录为 /root 用户的标识为 0
主机名称为 newrain
网卡的IP地址为 192.168.1.106
[root@xa2404 tmp]# vim test.sh
date
echo "当前的用户为 $USER"
echo "当前用户的宿主目录为 ${HOME} 用户的标识为 $UID"
echo "主机名为 $HOSTNAME"
echo "网卡的IP地址为:`ifconfig ens33 | grep netmask | cut -d" " -f10`"
echo "当前系统的剩余根分区空间为:`df -h | awk 'NR==6{print $4}'`"
echo "当前系统的内存使用率为:`free -m | awk 'NR==2{print $3/$2*100}'%`"
echo "当前系统的平均负载为:uptime | cut -d" " -f10- "
注:这里-f10-表示从10开始往后的所有,也可以写-f10-12表示第10-12个
位置变量
[root@xa2404 tmp]# vim a.sh
echo 我是第${1}个位置变量
echo 我是第二个位置变量${2}
echo 位置变量${3}
[root@xa2404 tmp]# sh a.sh 6 5 1
我是第6个位置变量
我是第二个位置变量5
位置变量1
[root@xa2404 tmp]# vim a.sh
echo 我是第${1}个位置变量
echo 我是第二个位置变量${2}
echo 位置变量${3}
echo 一共有${#}位置变量
echo 你输入的位置变量有${*}
[root@xa2404 tmp]# sh a.sh 1 zhangsan ol
我是第1个位置变量
我是第二个位置变量zhangsan
位置变量ol
一共有3位置变量
你输入的位置变量有1 zhangsan ol
[root@xa2404 tmp]# vim a.sh
x=${1:-4}
y=${2:-4}
echo $(($x+$y))
[root@xa2404 tmp]# sh a.sh
8
[root@xa2404 tmp]# sh a.sh 8 8
16
四、脚本运行
子Shell
[root@xa2404 tmp]# vim b.sh
[root@xa2404 tmp]# sh b.sh
/tmp
/var/log/zabbix
[root@xa2404 tmp]# . b.sh
/tmp
/var/log/zabbix
[root@xa2404 zabbix]#
bash 脚本测试
•sh –x script
这将执行该脚本并显示所有变量的值
•sh –n script
不执行脚本只是检查语法模式,将返回所有错误语法
•sh –v script
执行脚本前把脚本内容显示在屏幕上
五、变量置换
命令替换
a=`date +%m%d`
a=$(date +%m%d)
反引号亦可用$()代替
六、Shell编程-流程控制
Shell编程-条件结构
测试
test 条件
条件为真返回0,条件为假返回1
[ 条件 ]
man test 通过手册查看test命令使用方法
test 能够理解三种类型的表达式
1.文件测试
2.字符串比较
3.数字比较
字符串
-n STRING
# -n 字符串长度不为零为真
-z STRING
# -z 字符串长度为零为真
String1 = string2
# = 判断两个字符串是否一样
String1 != string2
# != 判断两个字符串是否不一样
数字
-eq 等于 -ne 不等于
-gt 大于 -lt 小于
-ge 大于等于 -le 小于等于
文件
test
-f 文件存在且是普通文件
-d 文件存在且是目录文件
-b 文件存在且是块设备
-c 文件存在且是字符设备
-e 文件存在
-h 文件存在且是软链接
笔记:
shell脚本多行注释
<<!
!
注:结尾的叹号要顶格
[ 两边留有空格 ]
安装 net-tools
当前系统的平均负载
w
uptime