本文作者:心月

shell编程:变量的高级用法(附实例)

心月IT博客 2019-06-11
shell编程:变量的高级用法(附实例)摘要:hell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

1、变量替换和测试

    变量替换:

        ①、${变量#匹配规则} #从头开始匹配,最短删除;

        ②、${变量##匹配规则} #从头开始匹配,最长删除;

        ③、${变量%匹配规则} #从尾开始匹配,最短删除;

        ④、${变量%%匹配规则} #从尾开始匹配,最长删除;

        ⑤、${变量/旧字符串/新字符串} #替换变量内的旧字符串为新字符串,只替换第一个旧字符串

        ⑥、${变量//旧字符串/新字符串} #替换变量内的旧字符串为新字符串,全部替换;


     实例:

    variable_1 = "I love you,Do you love me"
    var1=${variable_1#*ov} //var1的结果 "e you,Do you love me"
    var2=${variable_1##*ov} //var2的结果 "e me"
    var3=${variable_1%ov*} //var3的结果 "I love you,Do you l"
    var4=${variable_1%%ov*} //var4的结果 "I l"
    var5=${variable_1/love/like} //var5的结果为 "I like you,Do you love me"
    var6=${variable_1//love/like} //var5的结果为 "I like you,Do you like me"

 

2、字符串处理

    计算字符串长度:

        ${#string}

        expr length "$string"  //字符串中有空格则必须加引号


        实例:

        var1="Hello World"
        len = ${#var1}        //11
        `expr length "$var1"`    //11


    获取子字符串中的索引位置:(获取的是字符的位置不是字符串的位置)

        expr index $string $substring //获取满足$substring条件的字符串在$string中的索引位置

        

        实例:

        var1="Hello World"
        `expr index $var1 World`//7
        `expr index $var1 or`//5


    计算子串长度:

        expr match $string substr //从头部开始匹配


        实例:

        var1="Hello World"
        `expr match "$var1" World` //0
        `expr match "$var1" Hello` //5
        `expr match "$var1" Hello.*` //11


    抽取子串:

         ${string:position} 从 string中的position开始

         ${string:position:length} 从position开始,匹配长度为length

         ${string: -position} 从右边开始匹配

         ${string:(position)} 从左边开始匹配 ,索引从0开始

         expr substr $string $position $length 从position开始,匹配长度为length,索引从1开始


      实例:

        var1="Hello World"
        ${var1:6}    //World
        ${var1:4:10}    //o World
        ${var1: -3}    //rld
        ${var1: -3:2}    //rl
        `expr substr "$var1" 5 10` //o Worl


3、命令替换

    所谓命令替换就是将某一段需要命令执行的结果作为另一个shell命令的一部分。


     语法格式:

         `command` (反引号)

         $(command)


       实例:

           获取系统的所有用户并输出:

    cat /etc/passwd | cut -d ":" -f 1 //cut -d ":" :用':'分割结果, -f 1:取分割后的第一个


    根据系统时间计算今年或明年

       $(date +%Y) : 今年

       $(($(date +%Y) + 1)) : 明年 //$(())主要用来进行算数运算

       num1=50

       num2=70

       echo $(($num1 + $num2)) //120


    实例:

       计算今年还剩多少个星期:

     echo $(((365-$(date +%j))/7))


       获取linux中正在运行的nginx进程

     ps -ef | grep nginx | grep -v grep | wc -l //grep -v : 排除, wc -l统计前面执行的结果有多少行


4、有类型变量

    通过declare声明变量类型

         var1="hello world" 

         declear -r $var1 //声明var1为只读变量

         declare -i - //声明为整形

         declare -a - //声明为数组

         (数组定义: arr=("mike" "joe" "juny"))

         declare -f //显示定义的函数和内容

         declare -f //显示定义的函数,不会显示内容

         declare -x - //声明变量为环境变

         (取消声明变量:把减号'-'换成加号'+')


5、数学运算:expr

(运算时,特殊符号要转义:| < > * & <= >=)

expr $num1 opearator $num1 //只能进行整数运算

$(($num1 opearator $num1)) //'*'不需要转义,在比较判断时可能出错,只能进行整数运算

num1=50
num2=70
expr $num1 \< $num2 //比较num1、num2的大小

num3=$(($num1+$num2))
echo $num3    //120


判断一个变量是否为正整数:

(先判断是否为整数,然后判断是否为正数)

实例:

    输入一个整数n,计算1+2+3+...+n的值

#/bin/sh/
#

num=25
$((expr $num \> 0))

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"
done


6、数学运算:bc

(可以处理浮点数运算)

num1=2.3
num2=3.1
echo "num1 + num2" | bc//5.4
echo "scale=3;$num1 / $num2" | bc//0.741; scale:指定精确位数


文章版权及转载声明:

本文由:IT技术博客 心月整理分享于 2019-11-18 20:16:29
若转载请注明原文及出处:http://www.xinyueseo.com/linux/277.html

分享到:
赞(
发表评论
快捷输入:

验证码

    评论列表 (有 0 条评论,人围观)参与讨论