初识Shell②

60 阅读2分钟

初识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