Shell基础整理一

版权声明:©来自CSDN博客作者"李在奋斗"的原创作品,如需转载,请注明出处 https://blog.csdn.net/qq_31725371/article/details/83549234

Shell基础整理

仅以此章记录曾经奋斗的岁月

变量

位置变量$1 ~ $10

//位置变量$1,$2
//ping.sh
#!/bin/bash
ip=$1
ping ip && echo "ping $ip is up" || echo "ping $ip is down"

//演示位置变量$1
[root@localhost ~]# sh ping.sh 192.999.999.999 114.114.114.114
ping 192.999.999.999 is down
[root@localhost ~]# 

//演示位置变量$2
//ping.sh
#!/bin/bash
ip=$2
ping ip && echo "ping $ip is up" || echo "ping $ip is down"

[root@localhost ~]# sh ping.sh 192.999.999.999 114.114.114.114
ping 114.114.114.114 is up
[root@localhost ~]# 


预定义变量

$0      脚本名
&*      所有的参数
$@      所有的参数
$#      参数的个数
$$      当前进程的PID
$!      后台运行的最后一个进程的PID
$?      上一个命名执行的结果,0表示成功
$-      显示shell使用的当前选项
$_      之前命令的最后一个参数

//案例:脚本后面加上需要ping的ip
#!/usr/bin/bash
if [ $# -eq 0 ];then
        echo "usage:  $(basename $0) file"   #basename去除路径只显示当前文件名
        exit
fi

if [ ! -f $1 ];then
        echo "$1 is not file"
        exit
fi

for ip in $(cat ip.txt)
do
        ping -c1 $ip &>/dev/null
        if [ $? -eq 0 ];then
                echo "$ip is up"
        else
                echo "$ip is down"
        fi
done

[root@mysql-master /soft/scripts]# sh  ping.sh ip.txt 
192.168.1.4 is up
192.168.1.3 is down
192.168.1.16 is up
192.168.1.17 is up
[root@mysql-master /soft/scripts]#

整数运算->ping批量主机ip

//方法一: expr
[root@mysql-master ~]# expr 2 \* 2          // + #### \* / 
4
[root@mysql-master ~]# expr 4 / 2
2

//方法二:$(($num1+$num2))
[root@mysql-master ~]# echo $((2*4))        // + #### * \
8
[root@mysql-master ~]# echo $((4/2))
2
案例:输出内存占用百分百
#!/usr/bin/bash
Mem_used=`free -m|grep "^Mem"|awk '{print $3}'`
Mem_total=`free -m|grep "^Mem"|awk '{print $2}'`
Mem_percent=$((Mem_used*100/Mem_total))

echo "Memory used: $Mem_percent"


//方法三:let
[root@mysql-master ~]# let sum=2*3 ;echo $sum
6
[root@mysql-master ~]# let i++;echo $i
1
[root@mysql-master ~]# 
案例:连续ping 192.168.1.16 ~ 192.168.1.18
#!/usr/bin/bash
i=16
while [ $i -le 18 ]
do
        IP=192.168.1.$i
        ping -c1 $IP &>/dev/null
        if [ $? -eq 0 ];then
                echo "$IP is up"
        else
                echo "$IP is down"
        fi
        let i++
done

//方法四:$[]
[root@mysql-master ~]# echo $[2*3]
6
[root@mysql-master ~]# echo $[4/2]
2
[root@mysql-master ~]# 


小数运算

echo "3*5"|bc
echo "scale=2;6/4"|bc
[root@mysql-master ~]# awk "BEGIN{print 1/2}"
0.5
[root@mysql-master ~]# awk 'BEGIN{print 1/2}'
0.5
[root@mysql-master ~]# echo "print 1.5/2"|python
0.75
[root@mysql-master ~]# echo 'print 1.5/2'|python
0.75
[root@mysql-master ~]# 

【取数】变量内容的“删除和替换和替代”

并不会真正的对变量做修改,只是引用

// 变量的“删除”
[root@mysql-master ~]# url=www.sina.com.cn
[root@mysql-master ~]# echo ${#url}     #获取变量长度
15
[root@mysql-master ~]# echo ${url#*.}  #从前往后匹配到第一个.“删除”匹配的内容
sina.com.cn
[root@mysql-master ~]# echo ${url##*.} #从前往后匹配到最后一个.“删除”匹配内容
cn

[root@mysql-master ~]# echo ${url%.*}   #从后往前匹配到第一个.“删除”匹配内容
www.sina.com
[root@mysql-master ~]# echo ${url%%.*} #从后往前匹配到最后一个.“删除”匹配内容
www
[root@mysql-master ~]# echo $url
www.sina.com.cn
[root@mysql-master ~]#

// 变量的“替换”
[root@mysql-master ~]# echo ${url/sina/SINA}
www.SINA.com.cn
[root@mysql-master ~]# echo ${url//w/W}
WWW.sina.com.cn
[root@mysql-master ~]# 

//变量的替代:${变量名-新的变量值},若变量有被赋值(包括空值)则不会被替代
[root@mysql-master ~]# echo ${var1}         #没被定义过得变量

[root@mysql-master ~]# echo ${var1-www}     #被替代成www
www
[root@mysql-master ~]# echo ${url-www.baidu.com}    #被定义过则无法替代
www.sina.com.cn
[root@mysql-master ~]# echo ${var1:-ccc}    # :#### 未被定义过(包括空值)会把替代
ccc
[root@mysql-master ~]# echo ${var2:-ccc}
ccc
[root@mysql-master ~]# echo ${url:-ccc}     # :-已经存在的无法被替代
www.sina.com.cn
[root@mysql-master ~]# echo ${var1}

[root@mysql-master ~]# echo ${var1:=111}   # :=若没有定义或空值则给变量赋值  
111
[root@mysql-master ~]# echo ${var1}
111
[root@mysql-master ~]# 

总结:${变量名-新的变量值},若变量有被赋值(包括空值)则不会被替代
      ${变量名:-新的变量值},若变量未定义(包括定义但为赋值空值)则也会被替代,但是不会被赋值
      ${变量名=新的变量值},若变量未定义,则给变量赋值;若有被定义或为空值,则替代但不会赋值
      ${变量名:=新的变量值}, 若变量未定义(包括定义但为赋值空值),则会给变量赋值;若已经有值则不会发生变化
      只要是变量有值了,上面的任何操作都不会对变量产生任何变化,不能耍流氓!

* 适用于我想要你给个初始值,但是你没有给,那我就给你个默认值

【取数】变量的索引及切片

// www.sina.com.cn
// 0123456789     变量对应的索引位置,从0开始计数
[root@mysql-master ~]# echo ${url}
www.sina.com.cn
[root@mysql-master ~]# echo ${url:3:5}  #从第4个数开始截取5个长度
.sina
[root@mysql-master ~]# echo ${url:4:4}   #从第5个数开始截取4个长度
sina
[root@mysql-master ~]# echo ${url:4}     #从第4个数开始截取后面所有
sina.com.cn
[root@mysql-master ~]# 

猜你喜欢

转载自blog.csdn.net/qq_31725371/article/details/83549234