shell篇(中)
练习1
编写一个shell脚本,用于搜集其执行主机的信息,打印结果如下:
[root@tiger tmp]# ./test.sh
2012年 05月 24日 星期四 17:07:45 CST
当前的用户为 root
当前用户的宿主目录为 /root 用户的标识为 0
主机名称为 newrain
网卡的IP地址为 192.168.1.106
##脚本源码如下
#!/usr/bin/bash
# 获取主机基本信息
time=`date +%y年%m月%d日-%H:%M`
ip=`ifconfig eth0|grep inet|awk '{print $2}'`
也可以用ip -f inet a show dev ens33 | awk '/inet/{print $2}' | cut -d/ -f或者ip -f inet a show dev ens33 | awk '/inet/{print $2}' | awk -F'/' '{print $1}'
echo "现在的时间是:" $time
echo "当前的用户是:" $USER
echo "当前的用户标识:" $UID
echo "当前的主机名称是:" $HOSTNAME
echo "当前可用网卡IP是:" $ip
echo "客户端的公网IP是:" `curl -s http://httpbin.org/ip | grep origin | awk '/:/{print $2}' | awk -F\" '{print $2}'`
操作如下图所示:
其中的公网IP地址 也可以改为:
`curl -s http://httpbin.org/ip | grep origin | awk '/:/{print $2}' | cut -d\" -f2`
操作如下图所示
取根分区剩余空间:
# df -h /dev/sda2 |awk 'NR==2{print $4}' 371G
取当前系统剩余内存:
# echo "现在的剩余内存是:"`free -m |awk 'NR==2{print $4}'`
现在的剩余内存是:12813M
取当前cpu平均负载:
# echo 现在cpu的`uptime |cut -d, -f3-` //-d指定分隔符,-f指定显示区域,3-第三列以后(包括第三列)
现在cpu的 load average: 0.07, 0.12, 0.11
# echo 现在cpu的`uptime |awk -F"," '{print $4,$5,$6}'`
现在cpu的 load average: 0.00 0.04 0.10
查看磁盘空间
取根分区剩余磁盘或硬盘空间
输入:df -h | awk '/\/$/{print $5}' 或者 df -h | grep "/$" | awk '{print $5}'
第一种方法输入:df -h | awk ‘//$/{print $5}’
第二种方法输入:df -h | grep “/$” | awk ‘{print $5}’
第三种方法:
查看系统剩余内存
取当前系统剩余内存
输入:free -m | awk '/Mem/{print $4}' 或者 free -m | awk 'NR==2{print $4}'
第一种方法:输入free -m | awk ‘/Mem/{print $4}’
第二种方法:输入:free -m | awk ‘NR==2{print $4}’
查看cpu平均负载
取cpu平均负载
输入:uptime | awk '{print $8,$9,$NF}' 或者uptime | cut -d, -f3- | cut -d: -f2或者 uptime | cut -d: -f5
输入:uptime可以查看状态,如下如所示
第一种方法输入:uptime | awk ‘{print $8, 9 , 9, 9,NF}’
第二种方法:uptime | cut -d, -f3- | cut -d: -f2
第三种方法 :uptime | cut -d: -f5(这种方法就没有第二种那么繁琐,直接以“:”为分割)
位置变量
位置变量
$1 $2 $3 $...
#/test.sh start
#/test.sh 2 3 5 hello
start是第1个位置参数
2 是第1个位置参数
3 是第2个 依次类推
例子:
[root@newrain shell]# cat weizhi.sh
#!/bin/bash
#...
echo 我的第一个位置参数是:$1
echo 我的第二个位置参数是:$2
echo 我的第三个位置参数是:$3
echo 我的第四个位置参数是:$4
echo 一共有 $# 个位置参数
echo 你输入的参数分别是:$*
操作可见下面两张图
第一张图:设置了$1,$2, 3 三个位置变量, 3三个位置变量, 3三个位置变量,#代表着一共有几个位置变量,$*代表着所有的位置变量参数分别是哪些。
从图二可见,我输入了 1,2,3一共三个位置变量,以及KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲显示出一共三个位置变量,*分别显示出了1,2,3这三种变量。
求出第一个参数和第二个参数的和
./5.sh 4 5
9
./5.sh 10 20 30
#!/bin/bash
# 求 $1 $2 的和
x=${1:-0}
y=${2:-0}
echo $(($x+$y))
操作看下方图片
图一
图二
四、脚本运行
创建bash脚本(shell脚本)
1.创建脚本文件
指定命令解释器
注释
编写bash指令集合 (脚本内容)
2.修改权限 chmod +x scriptname (scriptname 是你要修改权限的脚本名字)
这些之前的笔记中提到过,可以往作者往期作品看看
bash脚本执行
#./scripts
#/shelldoc/scripts
#. ./scripts 使用当前shell执行
#source ./scripts 使用当前shell执行 比如cd /tmp会改变当前shell环境,但是其他的方式不会
#bash scripts
这些在上文的执行脚本类型中有提到
子shell
[root@mysql ~]# vim bash.sh
cd /opt/
pwd
[root@mysql ~]# sh bash.sh
/opt
[root@mysql ~]# source bash.sh
/opt
[root@mysql opt]#
bash 脚本测试
•sh –x script(script是文件名)
这将执行该脚本并显示所有变量的值
•sh –n script(script是文件名)
不执行脚本只是检查语法模式,将返回所有错误语法
•sh –v script(script是文件名)
执行脚本前把脚本内容显示在屏幕上
用法如下图