码迷,mamicode.com
首页 > 其他好文 > 详细

一张图说明环境变量

时间:2016-08-11 23:25:27      阅读:334      评论:0      收藏:0      [点我收藏+]

标签:环境   变量   

为了搞懂环境变量,做了一个小实验,体会到环境变量到底是什么样子的。


[root@localhost ~]# cat 1.sh

#!/bin/bash

echo $n

[root@localhost ~]# cat 22.sh

#!/bin/bash

export n=98

/root/1.sh


我在22.sh文件中定义了环境变量n,并且执行1.sh文件。在1.sh文件中执行echo $n  。然后我给两个文件都加上x权限,执行22.sh,我们将会得到什么呢?


[root@localhost ~]# ./22.sh

98


很明显,我们得到了98。但在22.sh中,并没有直接echo $n的命令,但我们调用了1.sh命令,所以可以打印出$n。那么问题就来了,1.sh中并没有变量n=98,98又是怎么跑到n里面的呢?让我们来看下面这张图。

技术分享

首先22.sh中声明了环境变量n=98,当22.sh执行1.sh文件时,1.sh会引用22.sh中的环境变量n,然后执行自身的echo $n命令,再将结果送到22.sh中。


实验总结:

  1. 环境变量对当前的shell进程和其子进程

  2. 环境变量随当前shell进程结束而消失,如果当前进程关闭,则子进程无法在使用父进程中的环境变量。





练习:

1、编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小。


echo "The hostname is:    `hostname`"

echo "The ip address is:  `ifconfig | sed -n ‘s@^[[:space:]]\+inet[[:space:]]@@p‘ | head -n 1 | cut -d ‘ ‘ -f 1`"

echo "The systerm is:     `cat /etc/centos-release`"

echo "The kenerl is :     `uname -r`"

echo "The cpu is:         `lscpu | sed -n ‘13p‘|tr -s " "|cut -d " " -f 3-7`"

echo "The MemTotal is :   `cat /proc/meminfo | sed -n ‘1p‘| tr -s ‘ ‘|cut -d " " -f 2-3`"

echo "The disk size is :  `fdisk -l | grep "\<sd[a-z]\>" | cut -d " " -f 3-4 | tr ‘,‘ ‘ ‘dev/sd[a-z]`"


2、编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到/root/etcYYYY-mm-dd中


#/bin/bash

cp -r /etc/ /root/etc`date +%F`


3、编写脚本/root/bin/disk.sh,显示当前硬盘分区中空间利用率最大的值


#!/bin/bash

echo "The use number of disk :`df | grep "sd" | tr -s ‘ ‘ | cut -d " " -f 5|sort -n | tail -n 1`"


4、编写脚本/root/bin/links.sh,显示正连接本主机的每个远程主机的IPv4地址和连接数,并按连接数从大到小排序


#!/bin/bash

echo "`netstat -nt|tr -s ‘ ‘| cut -d ‘ ‘ -f 4 | grep "^[0-9]"|cut -d: -f1 | uniq -c |sort -nr`"


5、写一个脚本/root/bin/sumid.sh,计算/etc/passwd文件中的第10个用户和第20用户的ID之和


#/bin/bash

USER10=`cat /etc/passwd | sed -n ‘10p‘ | cut -d: -f 3`

USER20=`cat /etc/passwd | sed -n ‘20p‘ | cut -d: -f 3`

SUM=$(($USER10+$USER20)) 

echo "The sum is $SUM"


6、写一个脚本/root/bin/sumspace.sh,传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和


#!/bin/bash

first=`grep "^$" $1 | wc -l`

second=`grep "^$" $2 | wc -l`

SUM=$[$first+$second]

echo "The sum is $SUM"



7、写一个脚本/root/bin/sumfile.sh,统计/etc, /var, /usr目录中共有多少个一级子目录和文件


#!/bin/bash

Etc=`ls -1 /etc | wc -l`

Var=`ls -l /var | wc -l`

Usr=`ls -l /usr | wc -l`


Sum=$[Etc+Var+Usr]

echo "The SUM is $Sum"


8、写一个脚本/root/bin/argsnum.sh,接受一个文件路径作为参数;如果参数个数小于1,则提示用户“至少应该给一个参数”,并立即退出;如果参数个数不小于1,则显示第一个参数所指向的文件中的空白行数


#!/bin/bash

read -p "please give me the filesname:" filename

[ -e $filename ] &&  echo "The file space lines are:$(grep "^$" $filename | wc -l )" || echo "No file"



9、写一个脚本/root/bin/hostping.sh,接受一个主机的IPv4地址做为参数,测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问”


#!/bin/bash

read -p "you want to ping IPv4:" Ip

ping -c1 -W1 $Ip &> /dev/null && echo "ping successful" && exit || echo "ping failed"



10、判断硬盘的每个分区空间和inode的利用率是否大于80,如果是,发邮件通知root磁盘满



#!/bin/bash

Inode=`df -i | grep "sd[a-z]" | tr -s " " | cut -d " " -f 5 | sed ‘s@\%@@‘`

Disk=`df | grep "sd" | tr -s ‘ ‘ | cut -d " " -f 5 | sed ‘s@\%@@‘`

[ $Inode -ge 80 ] || [ $Disk -ge 80 ] && mail -s "NO free size for your DISK" root < help.txt 



11、指定文件做为参数,判断文件是否为.sh后缀,如果是,添加x权限


#!/bin/bash

read -p "please give a filename:" file

[[ $file =~ .*.sh$ ]] && chmod +x ./$file && echo "This is a shellfile." || echo "This is not a shellfile."


12、判断输入的IP是否为合法IP

#!/bin/bash

read -p "please write IP:" Ip

echo "$Ip"| egrep -o "\<([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>.\<([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>.\<([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>.\<([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"&> /dev/null && echo "right ip" || echo "worng ip "


13、计算1+2+3+...+100


#!/bin/bash

echo {1..100} | tr " " "+" |bc 


14、输入起始值A和最后值B,计算从A+(A+1)...+(B-1)+B的总和

#!/bin/bash

read -p "first number:" a

read -p "second number:" b

[ $a -ge $b ] && echo "sum is `seq -s+ $b $a | bc`" || echo "sum is `seq -s+ $a $b | bc`"



本文出自 “zebra930” 博客,请务必保留此出处http://zebra930.blog.51cto.com/11736340/1836789

一张图说明环境变量

标签:环境   变量   

原文地址:http://zebra930.blog.51cto.com/11736340/1836789

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!