目录
题目
1.shell的运算符有哪些
2.数学计算的命令有哪些,并举例使用
3.${}中的使用,并举例包含(#, ##,%,%%,:, /, //),并举例使用
4.条件测试的语法
(()), [[]],[],test,功能以及语法格式
5.通过read读入两个整数,并比较他们的大小
6.假设执行一个可以携带参数的script,执行该脚本后屏幕会显示如下的数据
一、了解变量
顾名思义,变量就是程序设计语言中的一个可以变化的量,当然,可以变化的是变量的值。从本质上讲,变量就是在程序中保存用户数据的一块内存空间,而变量名就是这块内存空间的地址。
了解了变量之后,我们该怎样给变量命名呢?
二、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
四、条件测试基本语法

补充:文件测试操作符
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,执行该脚本后屏幕会显示如下的数据:
[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
补充:

