【Linux中高级运维: 第53天——Shell编程】第3章:read传参+条件测试与比较语句+字符串测试表达式+整数二元比较操作符+逻辑操作符+if判断语句+菜单的打印方式

网友投稿 586 2022-09-27

【Linux中高级运维: 第53天——Shell编程】第3章:read传参+条件测试与比较语句+字符串测试表达式+整数二元比较操作符+逻辑操作符+if判断语句+菜单的打印方式

【Linux中高级运维: 第53天——Shell编程】第3章:read传参+条件测试与比较语句+字符串测试表达式+整数二元比较操作符+逻辑操作符+if判断语句+菜单的打印方式

a=1

a=1$00=脚本名字echo $0 # Test syntax. if [ "$#" -eq 0 ]; then echo $"Usage: killproc [-p pidfile] [ -d delay] {program} [-signal]" return 1 fi

=脚本名字echo

a=1$00=脚本名字echo $0 # Test syntax. if [ "$#" -eq 0 ]; then echo $"Usage: killproc [-p pidfile] [ -d delay] {program} [-signal]" return 1 fi

# Test syntax. if [ "$#" -eq 0 ]; then echo $"Usage: killproc [-p pidfile] [ -d delay] {program} [-signal]" return 1 fi

$#案例

[root@web01 /server/scripts]# cat network if [ $# -eq 0 ]then echo "Usage: $0fiecho $1

[root@web01 /server/scripts]# set -- "I am" handsome oldboy.[root@web01 /server/scripts]# [root@web01 /server/scripts]# [root@web01 /server/scripts]# echo $1I am[root@web01 /server/scripts]# echo $2handsome[root@web01 /server/scripts]# echo $3oldboy.[root@web01 /server/scripts]# echo $#3[root@web01 /server/scripts]# echo $*I am handsome oldboy.[root@web01 /server/scripts]# echo $@I am handsome oldboy.[root@web01 /server/scripts]# for i in "$*";do echo $i;doneI am handsome oldboy.[root@web01 /server/scripts]# for i in "$@";do echo $i;done

$$

[root@web01 /server/scripts]# cat oldboy.sh echo $0echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} $13 $14 $15echo $#echo $*echo $@echo $$|tee /tmp/a.logsleep 30[root@web01 /server/scripts]# [root@web01 /server/scripts]# [root@web01 /server/scripts]# [root@web01 /server/scripts]# cat kill.sh kill `cat /tmp/a.log`

${parameter} 返回变量$parameter的内容${#parameter} 返回变量$parameter内容的长度(按字符),也适合特殊变量*${parameter:offset} 在变量${parameter}中,从位置offset之后开始提取子串到结尾${parameter:offset:length} 在变量${parameter}中,从位置offset之后开始提取长度为length的子串

#删除

${parameter#word} 从变量${parameter}【开头】开始删除最【短】匹配的word子串${parameter##word} 从变量${parameter}【开头】开始删除最【长】匹配的word子串${parameter%word} 从变量${parameter}结尾开始删除最短匹配的word子串${parameter%%word} 从变量${parameter}结尾开始删除最长匹配的word子串

#类似sed替换

${parameter/pattern/string} 使用string代替第一个匹配的pattern${parameter//pattern/string}

[root@web01 /server/scripts]# OLDBOY="I am oldboy" [root@web01 /server/scripts]# echo $OLDBOYI am oldboy[root@web01 /server/scripts]# echo ${#OLDBOY} #打印变量内容的长度。11[root@web01 /server/scripts]# echo ${OLDBOY:2:2}am[root@web01 /server/scripts]# echo ${OLDBOY:2}am oldboy[root@web01 /server/scripts]# echo ${OLDBOY:0:2}I[root@web01 /server/scripts]# echo ${OLDBOY:0:3}I a[root@web01 /server/scripts]# echo ${OLDBOY}I am oldboy[root@web01 /server/scripts]# echo ${OLDBOY}|grep -o oldboyoldboy[root@web01 /server/scripts]# echo ${OLDBOY:2:2}am[root@web01 /server/scripts]# echo ${OLDBOY:5:6}oldboy[root@web01 /server/scripts]# echo ${OLDBOY:5}

获取变量内容长度的方法:

[root@web01 /server/scripts]# echo $OLDBOY|wc -L22[root@web01 /server/scripts]# echo ${#OLDBOY}22[root@web01 /server/scripts]# expr length "$OLDBOY"22[root@web01 /server/scripts]# echo $OLDBOY|awk '{print length}'22[root@web01 /server/scripts]# echo $OLDBOY|awk '{print length($0)}'

[root@web01 /server/scripts]# sh count.shIamlinuxtoour[root@web01 /server/scripts]# [root@web01 /server/scripts]# cat count.sh chars="I am oldboy linux welcome to our training."for word in $charsdo if [ ${#word} -lt 6 ] then echo $word fidone

做销售的男生或女生,经常出差。 乐乐在家

result是乐乐的女朋友

乐乐出差了,第三者插足了。unset

[root@web01 /server/scripts]# test=lele[root@web01 /server/scripts]# echo $testlele[root@web01 /server/scripts]# result=${test:-unset}[root@web01 /server/scripts]# echo $resultlele[root@web01 /server/scripts]# unset test[root@web01 /server/scripts]# echo $test[root@web01 /server/scripts]# result=${test:-unset}[root@web01 /server/scripts]# echo $result

数值运算:

1)整数运算:

方法1:[root@web01 /server/scripts]# a=1[root@web01 /server/scripts]# let a=a+1[root@web01 /server/scripts]# echo $a2方法2:推荐小括号[root@web01 /server/scripts]# a=10[root@web01 /server/scripts]# ((a=a+1))[root@web01 /server/scripts]# echo $a11方法3:尽量不用做运算[root@web01 /server/scripts]# a=10[root@web01 /server/scripts]# expr $a + 111121[root@web01 /server/scripts]# b=`expr $a + 111`[root@web01 /server/scripts]# echo $b121方法4:[root@web01 /server/scripts]# a=11[root@web01 /server/scripts]# echo $[$a+11]22[root@web01 /server/scripts]# echo $[a+11]22[root@web01 /server/scripts]# c="$[a+11]"[root@web01 /server/scripts]# echo $c22方法5:[root@web01 /server/scripts]# a=8[root@web01 /server/scripts]# declare -i a=a+10[root@web01 /server/scripts]# echo $a

整数或者小数运算:

bc

[root@web01 /server/scripts]# echo 1+2|bc3[root@web01 /server/scripts]# echo 1.1*2|bc2.2[root@web01 /server/scripts]# echo 3/2|bc1[root@web01 /server/scripts]# echo 3%2|bc1[root@web01 /server/scripts]# echo 3.33*9.99|bc33.26[root@web01 /server/scripts]# echo "scale=4;3.33*9.99"|bc33.2667[root@web01 /server/scripts]# echo 3^2|bc

awk

[root@web01 ~]# echo 1.1 2|awk '{print $1*$2}'2.2[root@web01 ~]# echo 1.1 2|awk '{print $1%$2}'1.1[root@web01 ~]# echo 4 2|awk '{print $1%$2}'

(()) 逻辑判断

[root@web01 /server/scripts]# a=10[root@web01 /server/scripts]# ((a++))[root@web01 /server/scripts]# echo $a11[root@web01 /server/scripts]# ((a++))[root@web01 /server/scripts]# echo $a12[root@web01 /server/scripts]# ((a--))[root@web01 /server/scripts]# echo $a11[root@web01 /server/scripts]# ((a--))[root@web01 /server/scripts]# echo $a10[root@web01 /server/scripts]# ((--a))[root@web01 /server/scripts]# echo $a9[root@web01 /server/scripts]# ((--a))[root@web01 /server/scripts]# echo $a8[root@web01 /server/scripts]# ((--a))[root@web01 /server/scripts]# echo $a7[root@web01 /server/scripts]# echo $a7[root@web01 /server/scripts]# [root@web01 /server/scripts]# [root@web01 /server/scripts]# echo $((--a))6[root@web01 /server/scripts]# echo $a6[root@web01 /server/scripts]# echo $((--a))5[root@web01 /server/scripts]# echo $a5[root@web01 /server/scripts]# echo $((--a))4[root@web01 /server/scripts]# echo $a4[root@web01 /server/scripts]# echo $((a--))4[root@web01 /server/scripts]# echo $a3[root@web01 /server/scripts]# echo $((a--))3[root@web01 /server/scripts]# echo $a2[root@web01 /server/scripts]# ((8>7))[root@web01 /server/scripts]# echo $?0[root@web01 /server/scripts]# ((8<7))[root@web01 /server/scripts]# echo $?1[root@web01 /server/scripts]# ((8<7&&6>5))[root@web01 /server/scripts]# echo $?1[root@web01 /server/scripts]# ((8<9&&6>5))[root@web01 /server/scripts]# echo $?0[root@web01 /server/scripts]# ((8<7||6>5))[root@web01 /server/scripts]# echo $?

expr功能:

1)计算[root@web01 /server/scripts]# expr 10 + 10202)获取字符串长度[root@web01 /server/scripts]# a="oldgirl"[root@web01 /server/scripts]# echo $aoldgirl[root@web01 /server/scripts]# expr length "$a"73)判断字符串是否为整数数字或字符[root@web01 /server/scripts]# a=1[root@web01 /server/scripts]# expr $a + 1 &>/dev/null[root@web01 /server/scripts]# echo $?0[root@web01 /server/scripts]# a=oldboy[root@web01 /server/scripts]# expr $a + 1 &>/dev/null[root@web01 /server/scripts]# echo $?24)用来判断文件扩展名是否符合指定扩展名[root@web01 /server/scripts]# cat judge.sh if expr "$1" : ".*\.avi$" >/dev/null ; then echo "好兴奋啊" else echo "好失望啊" fi[root@web01 /server/scripts]# [root@web01 /server/scripts]# [root@web01 /server/scripts]# [root@web01 /server/scripts]# [root@web01 /server/scripts]# sh judge.sh oldboy.avi好兴奋啊[root@web01 /server/scripts]# sh judge.sh oldboy.log

[root@web01 ~]# read -p "请输入一个数字:" n请输入一个数字:100[root@web01 ~]# echo $n100[root@web01 ~]# read -t 10 -p "请输入两个数字:" n m请输入两个数字:100 110[root@web01 ~]# echo $n100[root@web01 ~]# echo $m

变量赋值的三种方式:

1)定义式a=12)read读入式read -t 10 -p "请输入两个数字:" n mn=110 m=1003)脚本传参$1=100

练习:

01-dingyi.sh

a=6b=2echo "a-b=$(($a-$b))"echo "a+b=$(($a+$b))"echo "a*b=$(($a*$b))"echo "a/b=$(($a/$b))"echo "a**b=$(($a**$b))"echo "a%b=$(($a%$b))"

变通:02-read.sh

改成read读入两个数

变通2:03-chuancan.sh

改成命令行传入两个数

[root@web01 /server/scripts]# cat 02-read.sh read -p "请输入两个整数:" a becho "a-b=$(($a-$b))"echo "a+b=$(($a+$b))"echo "a*b=$(($a*$b))"echo "a/b=$(($a/$b))"echo "a**b=$(($a**$b))"echo "a%b=$(($a%$b))"[root@web01 /server/scripts]# cat 03-chuancan.sh a=$1b=$2echo "a-b=$(($a-$b))"echo "a+b=$(($a+$b))"echo "a*b=$(($a*$b))"echo "a/b=$(($a/$b))"echo "a**b=$(($a**$b))"echo "a%b=$(($a%$b))"

[root@web01 /server/scripts]# test -f a && echo ddd >a ||echo 00[root@web01 /server/scripts]# [root@web01 /server/scripts]# [root@web01 /server/scripts]# cat acat: a: 没有那个文件或目录[root@web01 /server/scripts]# [root@web01 /server/scripts]# touch a[root@web01 /server/scripts]# test -f a && echo ddd >a ||echo 0[root@web01 /server/scripts]# cat addd[root@web01 /server/scripts]# test -x count.sh && ./count.sh ||echo "没有执行权限"没有执行权限[root@web01 /server/scripts]# [root@web01 /server/scripts]# [root@web01 /server/scripts]# [root@web01 /server/scripts]# ls count.sh count.sh[root@web01 /server/scripts]# ls count.sh -l-rw-r--r-- 1 root root 131 5月 28 10:36 count.sh[root@web01 /server/scripts]# chmod +x count.sh [root@web01 /server/scripts]# ls count.sh -l-rwxr-xr-x 1 root root 131 5月 28 10:36 count.sh[root@web01 /server/scripts]# test -x count.sh && ./count.sh ||echo "没有执行权限"Iamlinuxtoour[root@web01 /server/scripts]# [ -x count.sh ] && ./count.sh ||echo "没有执 行权限"Iamlinuxtoour[root@web01 /server/scripts]# [[ -x count.sh ]] && ./count.sh ||echo "没有 执行权限"

文件测试表达式用法:对文件的属性进行判断,然后根据结果进行处理

[root@web01 /server/scripts]# touch oldboy.txt[root@web01 /server/scripts]# [ -f oldboy.txt ] && echo 1 || echo 01[root@web01 /server/scripts]# [root@web01 /server/scripts]# [root@web01 /server/scripts]# [root@web01 /server/scripts]# rm -f oldboy.txt [root@web01 /server/scripts]# [ -f oldboy.txt ] && echo 1 || echo 00[root@web01 /server/scripts]# mkdir oldboy[root@web01 /server/scripts]# [ -f oldboy ] && echo 1 || echo 00[root@web01 /server/scripts]# [ -e oldboy ] && echo 1 || echo 01[root@web01 /server/scripts]# [ -d oldboy ] && echo 1 || echo 01[root@web01 /server/scripts]# [ -L oldboy ] && echo 1 || echo 0

[ 条件1 ] && { 命令1 命令2 命令3 }如果条件成立,那么执行三个命令。if [ 条件1 ] then 命令1 命令2 命令3 fi[ 条件1 ] || { 命令1 命令2 命令3 }如果表达式不成立,那么执行三个命令。[ -L oldboy ] && echo 1 || echo 0[ 条件1 ] && { 命令1 命令2 } || { 命令3 }如果条件成立,那么执行命令1命令2,否则执行命令3。# Check that networking is up.[ "${NETWORKING}" = "no" ] && exit 6# if the ip configuration utility isn't around we can't function.[ -x /sbin/ip ] || exit

字符串测试表达式

[root@web01 /server/scripts]# [ -n "oldboy" ] && echo 1 || echo 01[root@web01 /server/scripts]# [ -z "oldboy" ] && echo 1 || echo 00[root@web01 /server/scripts]# [root@web01 /server/scripts]# a="oldboy"[root@web01 /server/scripts]# [ -z "$a" ] && echo 1 || echo 00[root@web01 /server/scripts]# unset a[root@web01 /server/scripts]# echo $a[root@web01 /server/scripts]# [ -z "$a" ] && echo 1 || echo 01[root@web01 /server/scripts]# [ "$a" = "oldboy" ] && echo 1 || echo 00[root@web01 /server/scripts]# a="oldboy"[root@web01 /server/scripts]# [ "$a" = "oldboy" ] && echo 1 || echo 01[root@web01 /server/scripts]# [ "$a" = "oldgir" ] && echo 1 || echo 00[root@web01 /server/scripts]# b="oldgirl"[root@web01 /server/scripts]# [ "${#a}" = "${#b}" ] && echo 1 || echo 00[root@web01 /server/scripts]# b="oldgir"[root@web01 /server/scripts]# [ "${#a}" = "${#b}" ] && echo 1 || echo 01[root@web01 /server/scripts]# sh 02-read.sh

作业:

[root@web01 /server/scripts]# cat 02-read.sh read -p "请输入两个整数:" a becho "a-b=$(($a-$b))"echo "a+b=$(($a+$b))"echo "a*b=$(($a*$b))"echo "a/b=$(($a/$b))"echo "a**b=$(($a**$b))"echo "a%b=$(($a%$b))"[root@web01 /server/scripts]# cat 03-chuancan.sh a=$1b=$2echo "a-b=$(($a-$b))"echo "a+b=$(($a+$b))"echo "a*b=$(($a*$b))"echo "a/b=$(($a/$b))"echo "a**b=$(($a**$b))"echo "a%b=$(($a%$b))"

对传入的参数或者read读入的变量内容判断,如果不符合计算条件,提示用户,并退出。[root@web01 /server/scripts]# sh 02-read.sh 请输入两个整数:02-read.sh:行2: -: 语法错误: 期待操作数 (错误符号是 "-")[root@web01 /server/scripts]# read -p "请输入一个数:" n请输入一个数:oldboy[root@web01 /server/scripts]# [ -z "$n" ] &&echo "没有任何输入"||echo "$n"oldboy[root@web01 /server/scripts]# read -p "请输入一个数:" n请输入一个数:[root@web01 /server/scripts]# [ -z "$n" ] &&echo "没有任何输入"||echo "$n"没有任何输入[root@web01 /server/scripts]# [root@web01 /server/scripts]# [root@web01 /server/scripts]# [root@web01 /server/scripts]# read -p "请输入一个数:" n请输入一个数:oldboy[root@web01 /server/scripts]# expr $n + 100 &>/dev/null[root@web01 /server/scripts]# echo $?2[root@web01 /server/scripts]# read -p "请输入一个数:" n请输入一个数:110[root@web01 /server/scripts]# expr $n + 100 &>/dev/null[root@web01 /server/scripts]# echo $?

[ 条件1 ] && { 命令1 命令2 命令3 }如果条件成立,那么执行三个命令。if [ 条件1 ] then 命令1 命令2 命令3 fi[ 条件1 ] || { 命令1 命令2 命令3 }如果表达式不成立,那么执行三个命令。[ -L oldboy ] && echo 1 || echo 0[ 条件1 ] && { 命令1 命令2 } || { 命令3 }

[root@web01 /server/scripts]# cat 02-read.sh read -p "请输入两个整数:" a bexpr $a + $b + 999 &>/dev/null[ $? -ne 0 ]&&{ echo "其中有一个输入不是数字." exit 1}echo "a-b=$(($a-$b))"echo "a+b=$(($a+$b))"echo "a*b=$(($a*$b))"echo "a/b=$(($a/$b))"echo "a**b=$(($a**$b))"echo "a%b=$(($a%$b))"

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【Linux中高级运维: 第25天——计算机网络】第3章:网络传输协议
下一篇:feign如何打印出http请求
相关文章

 发表评论

暂时没有评论,来抢沙发吧~