出大事了!在shell中,你真的会进行变量的运算吗?!能正确使用条件测试语法吗?!看后秒懂!

本文介绍了Shell中变量的基本概念、运算符的使用(包括算术运算、比较运算和字符串操作),以及条件测试的语法,通过实例演示了如何读取整数比较和执行脚本参数检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

题目

一、了解变量

二、shell的运算符

 三、运算命令

1、运算操作符与运算命令

2、${}中的使用

四、条件测试基本语法 


题目

1.shell的运算符有哪些
2.数学计算的命令有哪些,并举例使用
3.${}中的使用,并举例包含(#, ##,%,%%,:, /, //),并举例使用
4.条件测试的语法
  (()), [[]],[],test,功能以及语法格式
5.通过read读入两个整数,并比较他们的大小
6.假设执行一个可以携带参数的script,执行该脚本后屏幕会显示如下的数据

        在程序设计语言中,变量是一个非常重要的概念。也是初学者在进行Shell 程序设计之前必须掌握的一个非常基础的概念。只有理解变量的使用方法,才能设计出良好的程序。

一、了解变量

        顾名思义,变量就是程序设计语言中的一个可以变化的量,当然,可以变化的是变量的值。从本质上讲,变量就是在程序中保存用户数据的一块内存空间,而变量名就是这块内存空间的地址。

        了解了变量之后,我们该怎样给变量命名呢?

        在Shell 中,变量名可以由字母、数字或者下划线组成,并且只能以字母或者下划线开头。对于变量名的长度,Shell 并没有做出明确的规定。因此,用户可以使用任意长度的字符串来作为变量名。但是,为了提高程序的可读性,建议用户使用相对较短的字符串作为变量名。

二、shell的运算符

        与其他的程序设计语言一样,shell也有很多运算符。

补充:

运算规则

&:0&0=0;0&1=0;1&0=0;1&1=1;

| :0|0=0;  0|1=1; 1|0=1;  1|1=1;

^:0^0=1:  0^1=0; 1^0=0; 1^1=1;

~:~1=0;   ~0=1;

计算

例1.15&6

15的二进制1111,6的二进制0110

1111

0110

——

0110 ==6

优先级

从高到低:~、&、^、|

&&大于||

 三、运算命令

1、运算操作符与运算命

  (())

意义 用于整数运算的常用运算符

说明 (())中使用变量时可以去掉变量前的$符号

示例:

[root@localhost day2]# a=4
[root@localhost day2]# b=8
[root@localhost day2]# echo $((a+b))
12
[root@localhost day2]# echo $((a*b))
32
[root@localhost day2]# ((c=++a))
[root@localhost day2]# echo $a $c
5 5
[root@localhost day2]# ((c=a++))
[root@localhost day2]# echo $a $c
6 5

 let

意义 用于整数运算

说明 使用let命令可以执行一个或者多个算术表达式,其中的变量名毋需使用$符号

示例: 

[root@localhost day2]# let a=1+2
[root@localhost day2]# echo $a
3
[root@localhost day2]# let b='10 & 8'
[root@localhost day2]# echo $b
8

expr

意义 可用于整数运算,但还有很多其他的额外功能

说明 使用expr时,运算符及用于计算的数字左右都至少有一个空格,否则会报错;使用乘号时,必须使用反斜线屏蔽其特定含义;使用expr做计算,将一个未知的变量和一个已知的整数相加,看返回码是否为0,如果为0就认为做加法的变量为整数,否则就不是整数。

示例: 

[root@localhost day2]# expr 10 '<=' 8
0
[root@localhost day2]# expr 10 '|' 8
10
[root@localhost day2]# expr 4 '>' 8
0
[root@localhost day2]# expr length shell
5
[root@localhost day2]# expr substr shell 2 3
hel

 bc

意义 linux下的一个计算器程序(适合整数及小数运算)

示例: 

[root@localhost day2]# echo '1+1'
1+1
[root@localhost day2]# echo '1+1' | bc
2

$[]

意义 用于整数运算

awk

意义 awk既可以用于整数运算

 declare

意义 定义变量值和属性,-i 参数可以用于定义整形变量,做运算

示例: 

[root@localhost day2]# echo $[1+1]
2

[root@localhost day2]# echo '' | awk '{ print 1+1 }'
2
[root@localhost day2]# echo '' | awk '{ print 1.25+1.25 }'
2.5

[root@localhost day2]# declare -i a=1
[root@localhost day2]# declare -i b=1
[root@localhost day2]# declare -i c=a+b
[root@localhost day2]# echo $c
2

综合案例:

计算用户输入的任意两个整数,使用运算命令

[root@localhost day2]# vim first_operator.sh
#!/bin/bash
echo "Operation command is (()): "
a=$1
b=$2
echo a+b=$(($a+$b))
echo "Operation command is let: "
echo -n "a+b= " ; let c=$a+$b ; echo $c
echo "Operation command is expr: "
echo -n "a>b= " ; expr a '>' b
echo "Operation command is bc: "
echo -n "a+b= " ; echo $a+$b | bc
echo "Operation command is awk: "
echo -n "a+b= " ; echo '' | awk '{ print $a+$b }'
[root@localhost day2]# bash first_operator.sh 2 3
Operation command is (()): 
a+b=5
Operation command is let: 
a+b= 5
Operation command is expr: 
a>b= 0
Operation command is bc: 
a+b= 5
Operation command is awk: 
a+b= 0

2、${}中的使用

表达式

${parameter}

说明:返回变量的内容

${#parameter}

说明:返回变量内容的长度(按字符)

示例: 

[root@localhost day2]# data_var=HelloWorld
[root@localhost day2]# echo ${data_var}
HelloWorld
[root@localhost day2]# echo ${#data_var}
10

${paramater:offset}

说明:在变量${parameter} 中,从位置 offset 之后开始提取子串到结尾

${paramater:offset:length}

说明:在变量${parameter} 中,从位置 offset 之后开始提取长度为length的子串

示例: 

[root@localhost day2]# data_var=HelloWorld
[root@localhost day2]# echo ${data_var:6} 
orld
[root@localhost day2]# echo ${data_var:3:5} 
loWor
[root@localhost day2]# echo ${data_var:3:-2} 
loWor
[root@localhost day2]# echo ${data_var: -7:5} 
loWor
[root@localhost day2]# echo ${data_var: -7:-2}
loWor

${parameter#word}

说明:从变量${parameter} 开头开始删除最短匹配的 word 子串
补充:${data#*}: * 代表任意字符重复0次到任意多次, #最小的匹配: 重复0次

${parameter##word}

说明:从变量${parameter} 开头开始删除最长匹配的 word 子串

补充:${data##*}: * 代表任意字符重复0次到任意多次 ##: 最大的匹配:重复任意多次

示例: 

[root@localhost day2]# file_name=testfile.tar.gz
[root@localhost day2]# echo ${file_name} 
testfile.tar.gz
[root@localhost day2]# echo ${file_name#*.} 
tar.gz
[root@localhost day2]# echo ${file_name##*.} 
gz

${parameter%word}

说明:从变量${parameter} 结尾开始删除最短匹配的 word 子串

${parameter%%word}

说明:从变量${parameter} 结尾开始删除最长匹配的 word 子串

示例: 

[root@localhost day2]# file_name=testfile.tar.gz
[root@localhost day2]# echo ${file_name} 
testfile.tar.gz
[root@localhost day2]# echo ${file_name%.*} 
testfile.tar
[root@localhost day2]# echo ${file_name%%.*} 
testfile

${parameter/pattern/string}

说明:使用string 代替第一个匹配的 pattern

${parameter//pattern/string}

说明:使用string 代替所有匹配的 pattern

示例: 

[root@localhost day2]# file_name=testfile.tar.gz
[root@localhost day2]# echo ${file_name} 
testfile.tar.gz
[root@localhost day2]# echo ${file_name/t/g} 
gestfile.tar.gz
[root@localhost day2]# echo ${file_name//t/g} 
gesgfile.gar.gz

四、条件测试基本语法 

        在shell 程序中,用户可以使用测试语句来测试指定的条件表达式的条件的真或假。当指定的条件为真时,整个条件测试的返回值为0 ;反之,如果指定的条件为假,则条件测试语句的返回值为非 0 值。

补充:文件测试操作符 

        测试文件的读、写、执行等属性,不光是根据文件属性rwx 的标识来判断,还要看当前执行测试的用户是否真的可以按照对应的权限操作文件。

test <测试表达式>

示例: 

[root@localhost day2]# touch file_test
[root@localhost day2]# ll
total 4
-rw-r--r--. 1 root root   0 Aug 17 12:56 file_test
[root@localhost day2]# test -f file_test ; echo $?
0
[root@localhost day2]# test -e file_test ; echo $?
0
[root@localhost day2]# test -x file_test ; echo $?
1
[root@localhost day2]# test -d file_test ; echo $?
1

[ <测试表达式> ]

(注意测试表达式和方括号两边需要有空格)

示例: 

[root@localhost day2]# ll
total 4
-rw-r--r--. 1 root root   0 Aug 17 12:56 file_test
[root@localhost day2]# [ -f file_test ];echo $?
0
[root@localhost day2]# [ -w file_test ];echo $?
0
[root@localhost day2]# [ 1 -ne 1 ];echo $?
1
[root@localhost day2]# [ 1 -ne 2 ];echo $?
0

补充:

==: equal -> -eq

>: greater than -> gt

>=: greater than equal -> ge

<: less than -> lt

<=: less than equal -> le

!=: not equal => ne

[[ <测试表达式> ]]

示例: 

[root@localhost day2]# ll
total 4
-rw-r--r--. 1 root root   0 Aug 17 12:56 file_test
[root@localhost day2]# [[ -f file_test ]];echo $?
0
[root@localhost day2]# [[ -f file_test_a ]];echo $?
1
[root@localhost day2]# [[ -x file_test ]];echo $?
1

 综合示例:

1、通过read读入两个整数,并比较他们的大小

[root@localhost day2]# vim practice_compare.sh
#!/bin/bash\
#输入两个数字
read -p "please input two number:" a b    
#判断字符段的长度是否为0,-o 或,若结果为真则执行下一命令   
[ -z "$a" -o -z "$b" ] && {
  echo "please input 'two' number"
  exit 1
}
# +10判断它是否是数字
expr $a + 10 &>/dev/null
return_a=$?
expr $b + 10 &>/dev/null
return_b=$?
[ "$return_a" -eq 0 -a "$return_b" -eq 0 ] || {
  echo "please input two 'number'"
  exit 2
}
[ "$a" -lt "$b" ] && { 
  echo "$a < $b" 
  exit 0 
}
[ "$a" -eq "$b" ] && {
  echo "$a = $b" 
  exit 0 
}
[ "$a" -gt "$b" ] && {
  echo "$a > $b" 
  exit 0 
}
测试
[root@localhost day2]# bash practice_compare.sh 
please input two number:g d
please input two 'number'
[root@localhost day2]# bash practice_compare.sh 
please input two number: 2 4
2 < 4
[root@localhost day2]# bash practice_compare.sh 
please input two number:6 1
6 > 1
[root@localhost day2]# bash practice_compare.sh 
please input two number:2 2
2 = 2

2、假设执行一个可以携带参数的script,执行该脚本后屏幕会显示如下的数据:

程序的文件名;共有几个参数;若参数的个数小于 2 个则告知用户参数数量太少;全部的参数内容;第一个参数;第二个参数。
[root@localhost day2]# vim practice_script.sh
#!/bin/bash
echo "the script name is $0"
echo "the parameter number is $#"
[ "$#" -lt 2 ] && {
echo "the number of parameter is less than 2."
exit 0
}
[ "$#" -gt 2 ] && {
echo "the number of parameter is greate than 2."
exit 0
}
echo "your whole parameter is '$@'" 
echo "the 1st parameter is $1" 
echo "the 2nd parameter is $2"

测试
[root@localhost day2]# bash practice_script.sh zhangsan lisi wangwu
the script name is practice_script.sh
the parameter number is 3
the number of parameter is greate than 2.
[root@localhost day2]# bash practice_script.sh zhangsan 
the script name is practice_script.sh
the parameter number is 1
the number of parameter is less than 2.
[root@localhost day2]# bash practice_script.sh zhangsan lisi
the script name is practice_script.sh
the parameter number is 2
your whole parameter is 'zhangsan lisi'
the 1st parameter is zhangsan
the 2nd parameter is lisi

补充:

逻辑操作符

字符串测试操
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值