Linux基础-shell脚本变量

                                                          linux学习笔记之shell变量

系统变量: env可以查看系统变量

变量名作用

$0当前脚本的名字

$n传递给脚本或者函数的参数,n表示第几个参数

$#传递给脚本或函数的参数个数

$*传递给脚本或函数的所有参数

$@传递给脚本或者函数的所有参数

$$当前shell脚本进程的PID

$?函数返回值,或者上个命令的退出状态

$BASHBASH的二进制文件问的路径

$BASH_ENVBASH的启动文件

$BASH_VERSINFO[n]BASH版本信息,有六个元素

$BASH_VERSIONBASH版本号

$EDITOR脚本所调用的默认编辑器

$EUID当前有效的用户ID

$FUNCNAME当前函数名

$GROUPS当前用户所属组

$HOME当前用户家目录

$HOSTTYPE主机类型

$LINENO当前行号

$OSTYPE操作系统类型

$PATHPATH路径

$PPID当前shell进程的父进程ID

$PWD当前工作目录

$SECONDS当前脚本运行秒数

$TMOUT不为0时,超过指定的秒将退出shell

$UID当前用户ID






变量的赋值方式:

一、直接赋值

显示赋值 abc=123    name="郑 俊雄",有空格需要用引号。默认都为string类型。

boy="$name is good"   一个变量引用另一个变量。

echo boy  输出为: 郑俊雄 is good  

命令替换

1、反引号`` 表示命令替换,用于双引号里面执行命令语句。

2、() 与反引号功能相同。  today="今天是(date+%F)"

二、变量赋值 read 

read -p "please input a ip : "  ip

read -n 2 name  只取两个字符

read -t 5 延时5秒 

read ip1 ip2  ip3 ip4 依次输入参数值 1.1.1.1   2.2.2.2 3.3.3.3 4.4.4.4

应用例子:

#!/usr/bin/bash 

read -p "输入姓名:" name

read -p "输入性别:" sex

echo "你输入的姓名是:$name, 性别:$sex "

chmod a+x read.sh

以上方式过于麻烦可以优化

read -p "请输入姓名,性别,年龄:" name sex age  //用于同时定义多个变量。

""  ''  单引号是强引用,双引号为弱引号。

'$name'   //无法读取name的值,输出为$name  

disk_free="df -Ph |grep '/$' |awk '{print $4}'"   //输出错误

disk_free=`df -Ph |grep '/$' |awk '{print $4}'` //输出正确

disk_free=(df -Ph |grep ''/$ |awk '{print $4}') //输出正确

三、变量的计算

整数运算

sum2=(($num+$num2)) 或者 sum2=((num+num2))

expr 1+2

sum=$[1+2]    //推荐使用方括号[]和let

let  num=1+2#!/usr/bin/bash

例子:计算内存占用率

#!memery used script

#!author zhengjx

mem_used=`free -m |grep '^Mem' |awk '{print $3}'`  

mem_total=`free -m |grep '^Mem' |awk '{print $2}'`

let mem_percent=$mem_used*100/$mem_total 

echo "内存使用百分比为:$mem_percent%"

例子2: while循序的计算

#!usr/bin/bash

#!ping script

#!Athor zhengjx

ip=www.baidu.com

i=1

while [ $i -le 5 ]

do

        ping -c2 $ip &>/dev/null

        if [ $? -eq 0 ];then

                echo $ip is up

        fi

        let i++

done

四: 变量的替换和删除

变量的删除

echo ${#url}                     //获取变量长度

echo ${ip#*.}                    //从前往后截取*.后的内容 输出为baidu.com,删掉www.

echo ${ip##.}                      //贪婪删除.   输出为com  从前往后 贪婪匹配。

echo ${ip%*.}                      //从后往前

echo ${ip%%.}                    //贪婪匹配  从后往前

echo ${ip%com}                 //从后往前  删掉com

变量切片

ip=www.baidu.com          //索引从0开始   0 1 2 3 4 5 6 7 8 9

echo ${ip:0:5}                   // www.ba

内容替换

echo ${ip/baidu/sina}       //baidu替换为sina

echo ${ip//w/W}                 //贪婪替换  小写w全部替换为大写W

内容替代

unset ip  重置ip变量

ehco {ip-aaaa}                //未定义的变量可以替代

echo {ip:-aaaa}               //可替换空值和未定义的值

扩展:变量i++ ++i的区别  shell脚本中基本只注重i的值,对于i++和++i没什么区别。

对变量值来说

i++ 和 ++i 值都是一样,不影响

对表达式来说,影响xy的值

let x=i++                       //先赋值,再计算   x=1 i=2

let y=++j                      //先计算再赋值 y=2 j=2

你可能感兴趣的:(Linux基础-shell脚本变量)