Shell变量的高级用法

一、变量替换

示例:

1、定义变量

va_1="i love you, do you love me?"

2、打印看看

echo $va_1

显示如下字符串:i love you, do you love me?

3、进行字符替换

var1=${va_1#*ov}

var1如下所示:e you, do you love me?

二、字符串处理

1、获取字符串长度
2、获取子串在字符串中的索引位置

语法:expr index $string $substring

3、计算子串的长度

语法:expr match $string substr

4、抽取子串

三、小练习

问题如下:

Shell脚本如下:

#!/usr/bin/env bash

string="Bigdata process framework is Hadoop,Hadoop is an open source project"

function tips_info
{
	echo "******************************************"
	echo "***  (1) 打印string长度"
	echo "***  (2) 在整个字符串中删除Hadoop"
	echo "***  (3) 替换第一个Hadoop为Mapreduce"
	echo "***  (4) 替换全部Hadoop为Mapreduce"
	echo "******************************************"
}

function print_len
{
	if [ -z "$string" ];then
		echo "Error,string is null"
		exit 1
	else
		echo "${#string}"
	fi
}

function del_hadoop
{
	if [ -z "$string" ];then
		echo "Error,string is null"
		exit 1
	else
		echo "${string//Hadoop/}"
	fi
}

function rep_hadoop_mapreduce_first
{
	if [ -z "$string" ];then
		echo "Error,string is null"
		exit 1
	else
		echo "${string/Hadoop/Mapreduce}"
	fi
}

function rep_hadoop_mapreduce_all
{
        if [ -z "$string" ];then
                echo "Error,string is null"
                exit 1
        else
                echo "${string//Hadoop/Mapreduce}"
        fi
}


while true
do

echo "【string=\"$string\"】"
tips_info
read -p "Please Switch a Choice: " choice
case "$choice" in
	1)
		echo
		echo "Length Of String is: `print_len`"
		echo
		continue
		;;
	2)
		echo
		echo "删除Hadoop后的字符串为:`del_hadoop`"
		echo
		;;
	3)
		echo 
		echo "替换第一个Hadoop的字符串为:`rep_hadoop_mapreduce_first`"
		echo
		;;
	4)
		echo 
                echo "替换第一个Hadoop的字符串为:`rep_hadoop_mapreduce_all`"
                echo
		;;
	q|Q)
		exit 0
		;;
	*)
		echo "error,unlegal input,legal input only in { 1|2|3|4|q|Q }"
		continue	
		;;
esac
done

四、命令替换

一段命令的执行结果是另一个命令的一部分,类似于函数引用

  • 例子1

    获取系统所有用户并输出

     #!/bin/bash
    #
    
    index=1
    for user in `cat /etc/passwd | cut -d ":" -f 1`
    do
    	echo "This is $index user: $user"
    	index=$(($index + 1))
    done
    
  • 例子2

    查看系统nginx进程是否存在,若不存在就启动它

    #!/bin/bash
    #
    
    nginx_process_num=$(ps -ef | grep nginx | grep -v grep | wc -l)
    
    echo "nginx_process_num = $nginx_process_num"
    
    if [ $nginx_process_num -eq 0 ];then
            systemctl start nginx
    fi
    

五、有类型变量

1、declare命令

六、数学运算

1、expr命令
2、expr操作符对照表(上)

注意!当使用两变量做比较使用|、&、<、>、<=、>=符号的时候,需要进行转义,如下:

expr $num1 \>= $num2
3、expr操作符对照表(下)
num3=`expr $num1 + $num2`
4、小练习

提示用户输入一个正整数num,然后计算1+2+3+4+···+num的值,必须对num是否为正整数做判断,不符合的话应当进行再输入

#!/bin/bash
#

while true
do
	read -p "pls input a positive number: " num

	expr $num + 1 &> /dev/null

	if [ $? -eq 0 ];then
		if [ `expr $num \> 0` -eq 1 ];then
			for((i=1;i<=$num;i++))
			do
				sum=`expr $sum + $i`
			done	
			echo "1+2+3+....+$num = $sum"
			exit
		fi
	fi
	echo "error,input enlegal"
	continue
done

Shell脚本中$0、$?、$!、$$、$*、$#、$@等的意义说明:

  • $$

    Shell本身的PID(ProcessID,即脚本运行的当前 进程ID号)

  • $!

    Shell最后运行的后台Process的PID(后台运行的最后一个进程的 进程ID号)

  • $?

    最后运行的命令的结束代码(返回值)即执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)

  • $-

    显示shell使用的当前选项,与set命令功能相同

  • $*

    所有参数列表。如"$*“用「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数,此选项参数可超过9个

  • $@

    所有参数列表。如"$@“用「”」括起来的情况、以"$1" “ 2 " … " 2" … " 2""n” 的形式输出所有参数

  • $@

    跟$*类似,但是可以当作数组用

  • $#

    添加到Shell的参数个数

  • $0

    Shell本身的文件名

  • $1~$n

    添加到Shell的各参数值。$1是第1参数、$2是第2参数…、

七、bc运算

简单介绍:

  • bc是bash内建的运算器,支持浮点数运算
  • 内建变量scale可以设置,默认为0
1、bc操作符对照表
1、加减乘除
2、求余以及指数运算
2、在脚本中使用bc
echo  "scale=4;23.33+24" | bc

|表示将前一条命令的输出,用作后一条命令的输入

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值