Shell 变量及函数讲解 [2]

Shell 变量的输入

    Shell变量除了可以直接赋值或脚本传参外,还可以使用read命令从标准输入获得,read为bash内置命令,可以通过help read查看帮助
    【语法格式】
       read [参数] [变量名]
    【常用参数】
        -p prompt:设置提示信息
        -t timeout:设置输入等待的事件,单位默认为秒
read的基本读入
      如果我们不加-t read就会一直等待。
[root@web02 ~]# read -p "Pls input one num:" num
Pls input one num:11
      设置超时时间3秒
[root@web02 ~]# read -t 3 -p "Pls input one num:" num
Pls input one num:[root@web02 ~]# 
     read 后面的参数就是一个变量。
[root@web02 ~]# read -t 18 -p "Pls input one num:" num
Pls input one num:18
[root@web02 ~]# echo $num
18
其中此步骤相当于赋值,num=18
    使用脚本操作步骤:
[root@web02 scripts]# sh abc.sh 
Pls input one num:18
18
[root@web02 scripts]# cat abc.sh 
#!/bin/bash
read -t 18 -p "Pls input one num:" num
echo $nu

     read在脚本中常用的例子:

第一种方法
[root@web02 scripts]# sh abc.sh 
Pls input one num:1 2
1-2 =-1
1+2 =3
1*2 =2
1/2 =0
1**2 =1
1%2 =1
[root@web02 scripts]# cat abc.sh 
#!/bin/bash
read -t 18 -p "Pls input one num:" 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 ))"
echo "$a%$b =$(( $a % $b ))"
第二种方法
[root@web02 scripts]# sh b.sh 
请输入号码:2 4
2+4 =6
2*4 =8
2/4 =0
2**4 =16
2%4 =2
[root@web02 scripts]# cat b.sh 
#!/bin/bash
read -p "请输入号码": num1 num2
a=$num1
b=$num2
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命令替代和read -p的功能
[root@web02 scripts]# sh b.sh 
请输入两个数字:2 5
2+5 =7
2*5 =10
2/5 =0
2**5 =32
2%5 =2
[root@web02 scripts]# cat  b.sh 
#!/bin/bash
echo -n "请输入两个数字:"
read 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 脚本常见的错误

[1]错误
[root@web02 scripts]# cat bash.sh 
#!/bin/bash
a=$1
b=$2
read -p "pls input" 
echo "a-b =$(( $a - $b ))"
echo "a+b =$(( $a + $b ))"
echo "a*b =$(( $a * $b ))"
错误:read 后面没有变量,会造成下面无法引用。造成错误
read 添加 a b即可
-------------------------------------------------------
正确操作如下
[root@web02 scripts]# cat bash.sh 
#!/bin/bash
a=$1
b=$2
read -p "pls input" a b
echo "a-b =$(( $a - $b ))"
echo "a+b =$(( $a + $b ))"
echo "a*b =$(( $a * $b ))"
[2] 错误
[root@web02 scripts]# cat bash.sh 
#!/bin/bash
a=$1
b=$2
read -p "pls input" $1 $2
echo "a-b =$(( $a - $b ))"
echo "a+b =$(( $a + $b ))"
echo "a*b =$(( $a * $b ))"
错误:其中read 后面的$1 已经有了变量,不能重复使用
[3] 错误
[root@web02 scripts]# cat bash.sh 
#!/bin/bash
a=$1
b=$2
read -p "pls input" $a
read -p "pls input" $b 
echo "a-b =$(( $a - $b ))"
echo "a+b =$(( $a + $b ))"
echo "a*b =$(( $a * $b ))"
错误:
1. 首先read  这样写会比较麻烦,相当于输入一个2 还需要在输入一个2 才可以输出
2.read 已经是一个变量了,不可以在定义a=$1
实战:判断输入2个数是否是整数
[root@web02 scripts]# sh abc.sh 
请输入2个数字:6 0
6-0 =6
6+0 =6
6*0 =0
0=0 can not be 0,so /,% cat not yunsuan
6**0 =1
[root@web02 scripts]# sh abc.sh 
请输入2个数字:6 9
6-9 =-3
6+9 =15
6*9 =54
6/9 =0
6%9 =6
6**9 =10077696
[root@web02 scripts]# sh abc.sh 
请输入2个数字:a b
请输入整数
[root@web02 scripts]# sh abc.sh 
请输入2个数字:a 8
请输入整数
[root@web02 scripts]# sh abc.sh 
请输入2个数字:8 8 8
请输入整数
======================================
脚本内容:
[root@web02 scripts]# cat abc.sh 
#!/bin/bash
read -t 18 -p "请输入2个数字:" a b
#no.1
[ -z "$a" ]&&{
  echo "必须为整数"
  exit 1
}
[ -z "$b" ]&&{
  echo "输入两个整数"
  exit 2
}
#no.2
expr $a + $b + 1 &>/dev/null
[ $? -ne 0 ]&&{
  echo "请输入整数"
exit 3
}
#no.3
echo "$a-$b =$(( $a - $b ))"
echo "$a+$b =$(( $a + $b ))"
echo "$a*$b =$(( $a * $b ))"
if [ $b -eq 0 ];then
echo "$b=0 can not be 0,so /,% cat not yunsuan"
else
echo "$a/$b =$(( $a / $b))"
echo "$a%$b =$(( $a % $b))"
fi
echo "$a**$b =$(( $a ** $b ))"

条件测试与比较

    在bash的各种流程控制结构中通常要进行各种测试,然后根据测试结果执行不同的操作,有时也会通过与if等条件语句相结合,更方便的完成判断
        条件测试通常由如下3种语法形式:
语法1:test<测试表达式>
语法2:[<测试表达式>]
语法3:[[<测试表达式>]]
说明:
    1.上述语法格式1和语法格式2的写法是相等的。语法格式3为扩展的test命令。推荐使用语法格式2
    2.在[[]]中可以使用通配符进行模式匹配。&&、||、>、<等操作可以应用于[[]]中,但不能应用于[]中
    3.对于整数的关系运算,也可以使用Shell的算术运算符(())

test测试表达式

1.判断是不是文件
[root@web02 scripts]# test -f /etc/hosts &&echo 1||echo 0
1
[root@web02 scripts]# test -f /etc/hostsa &&echo 1||echo 0
0
2.判断文件是否可以执行
[root@web02 scripts]# test -x /server/scripts/abc.sh &&echo 1||echo 0
0
[root@web02 scripts]# chmod +x abc.sh 
[root@web02 scripts]# test -x /server/scripts/abc.sh &&echo 1||echo 0
1
3.判断是不是目录
[root@web02 scripts]# test -d /etc/ &&echo 1||echo 0
1
[root@web02 scripts]# test -d /etc/hosts &&echo 1||echo 0
0
4.是否为空,为空是真,不为空是假
[root@web02 scripts]# test -z "oldboy"&& echo 1||echo 0
0
[root@web02 scripts]# test -z ""&& echo 1||echo 0
1

[]中括号表达式

1、判断是不是普通文件
[root@web02 scripts]# [ -f /etc/hosts ]&&echo 1||echo 0
1
[root@web02 scripts]# [ -f /etc/host ]&&echo 1||echo 0
0
2、是否是目录
[root@web02 scripts]# [ -d /etc/host ]&&echo 1||echo 0
0
[root@web02 scripts]# [ -d /etc/ ]&&echo 1||echo 0
1
3、是否可执行
[root@web02 scripts]# [ -x /etc/hosts ]&&echo 1||echo 0
0
[root@web02 scripts]# [ -x /server/scripts/abc.sh ]&&echo 1||echo 0
1

[[]]双括号表达式

[root@web02 scripts]# [[ -x /server/scripts/abc.sh ]]&&echo 1||echo 0
1
[root@web02 scripts]# [[ -x /etc/hosts ]]&&echo 1||echo 0
0
此括号和[[]]几乎和[]一样
区别是可以在多括号里面添加多个判断
    例如判断是不是目录 ,并判断下一个文件是不是可执行
[root@web02 scripts]# [[ -d /etc/ && -f /server/scripts/abc.sh ]]&&echo 1||echo 0
1
[root@web02 scripts]# [[ -d /etc/ && -f /server/scripts/aabc.sh ]]&&echo 1||echo 0
0
当2个参数都成立的时候就输入echo 1 ,当不成立的时候echo 2
提示:&&只在双括号里生效,如果在单括号需要使用-a,双中括号或用||  单括号使用-o
其中-a = and
        -o = or

文件测试表达式

常用的文件测试操作符
操作符 说明 举例
-b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
-c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。
-d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。
-g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。
-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。
-p file 检测文件是否是具名管道,如果是,则返回 true。 [ -p $file ] 返回 false。
-u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。
-r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。
-w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。
-x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。
-s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。
-e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。
特别说明:这些操作符号对于[[]]、[]、test几乎都是通用的,更多操作符请man test查询

例子:

测试文件是否存在
[root@web02 ~]# touch oldboy
[root@web02 ~]# ls -l oldboy
-rw-r--r-- 1 root root 0 Jul  8 07:28 oldboy
[root@web02 ~]# [ -f oldboy ]&& echo 1 ||echo 0
1
[root@web02 ~]# [ -f oldboy1 ]&& echo 1 ||echo 0
0
测试目录
[root@web02 ~]# [ -d oldgirl ]&& echo 存在||echo 不存在
存在
[root@web02 ~]# [ -d oldgirl1 ]&& echo 存在||echo 不存在
不存在
测试是否存在
[root@web02 ~]# [ -e oldboy ]&& echo 存在||echo 不存在
存在
[root@web02 ~]# [ -e oldgirl ]&& echo 存在||echo 不存在
存在
测试文件属性
[root@web02 ~]# ls -l oldboy 
-rw-r--r-- 1 root root 0 Jul  8 07:28 oldboy
[root@web02 ~]# [ -r oldboy ]&&echo 1||echo 2
1
[root@web02 ~]# [ -w oldboy ]&&echo 1||echo 2
1
[root@web02 ~]# [ -x oldboy ]&&echo 1||echo 2
2
[root@web02 ~]#  chmod +x oldboy 
[root@web02 ~]# [ -x oldboy ]&&echo 1||echo 2
1
测试shell变量定义
[root@web02 ~]# file1=/etc/services 
[root@web02 ~]# file2=/etc/rc.local 
对单个文件变量测试
[root@web02 ~]# [ -f $file1 ]&&echo 1||echo 0
1
[root@web02 ~]# [ -d $file2 ]&&echo 1||echo 0
0
最谨慎的操作步骤应该是加上双引号
[root@web02 ~]# [ -f "$file1" ]&&echo 1||echo 0
1
[root@web02 ~]# [ -d "$file2" ]&&echo 1||echo 0
0
提示:此处判断的是file2的变量的目录是否存在
生产场景案例:(例如rpcbind)
另一种写法
如果文件不存在,我就进行操作
[root@web02 ~]# [ -f "$file1" ]||echo 2
[root@web02 ~]# [ -f "$fil11e1" ]||echo 2
2
特殊文件测试表达式写法案例
        条件表达式判断条件后面执行多条命令语句写法。
范例1:当条件1成立时,同时执行命令1、命令2、命令3.
用法:
[ 条件1 ]&&{
命令1
命令2
命令3
}
示例:
[root@web02 ~]# [ -f /etc/hosts ]&&{ echo 1;echo 2;echo 3;echo 3; }
1
2
3
等于3 执行什么操作
[root@web02 ~]# sh 1.sh 3
1
2
3
[root@web02 ~]# cat 1.sh 
#!/bin/bash
[ $1 -eq 3 ]&&{
echo 1
echo 2
echo 3
}
可以使用条件表达式,大括号的用法,格式如下。
        当条件不成立时会执行大括号的内容
[ 3 -ne 3 ]||{
        echo "I am ok"
        echo "I am no"
        exit 1
}

字符串表达式

    字符串测试操作符的作用有:比较两个字符串是否相同、字符串的长度是否为零,字符串是否为NULL(注:bash区分零长度字符串和空字符串)等

常用字符串测试操作符 说明
-z “字符串” 若串长度为0则真,-z可以理解为zero
-n ”字符串“ 若昂度不为0则真,-n 可以理解为no zero
”串1“ = ”串2“
若串1等于串2则真,可以使用”==“代替”=“
“串2” != “串2”
若串1不等于串2则真,不能用“!==“ 代替”!=“
特别注意:
1. 以上表格中的字符串测试操作符号务必要用”“引起来。
2.比较符号两端有空格

字符串测试操作符提示:

    1)-n 比较字符串长度是否不为零,如果不为零则为真,如:[ -n “$myvar” ]
    2)-z 比较字符串长度是否等于零,如果等于零则为真,如:[ -z “$myvar” ]
特别注意,对于以上表格中的字符串测试操作符号,如[ -n “$myvar” ],要把字符串用“”引起来。
注意事项
1、字符串或字符串变量比较都要加双引号之后再比较。
2、字符串或字符串变量比较,比较符号两端最好都有空格,可以参考系统脚本
    “=”比较两个字符串是否相同,与“==”等价,如[ “$a” = “$b” ]其中$a这样的变量最好用“”括起来,因为如果中间由空格,*等符号就可能出错,更好的办法就是[ “${a}” = “${b}” ]
“!=” 比较两个字符串是否相同,不同则为“是”
[root@web02 ~]# [ -n "abc" ]&&echo 1||echo 0
1
[root@web02 ~]# [ -n "" ]&&echo 1||echo 0
0
[root@web02 ~]# [ -z abc"" ]&&echo 1||echo 0
0
[root@web02 ~]# [ ! -z abc"" ]&&echo 1||echo 0
1
其中!-z 相当于-n
例子演示
[root@web02 ~]# test=oldboy
[root@web02 ~]# [ -n "$test" ]&&echo 1||echo 0
1
[root@web02 ~]# [ -z "$test" ]&&echo 1||echo 0
0
相等测试
[root@web02 ~]# [ "$test" = "oldboy" ]&&echo 1||echo 2
1
[root@web02 ~]# [ "$test" = "oldbo1y" ]&&echo 1||echo 2
2
整数二元比较操作符
在[]以及test 中会用的比较符号 在(())和[[]]中使用的比较符 说明
-eq ==或== equal的偶写,相等
-ne != not equal的缩写,不相等
-gt > 大于greater than
-ge >= 大于等于greater equal
-lt < 小于类似less than
-le <= 小于等于less equal

更多参数可以使用man test

例子演示
[root@web02 ~]# [ 2 -eq 1 ]&&echo 1||echo 0
0
[root@web02 ~]# [ 2 -ne 1 ]&&echo 1||echo 0
1
[root@web02 ~]# [ 2 -gt 1 ]&&echo 1||echo 0
1
[root@web02 ~]# [ 2 -ge 1 ]&&echo 1||echo 0
1
[root@web02 ~]# [ 2 -lt 1 ]&&echo 1||echo 0
0
[root@web02 ~]# [ 2 -le 1 ]&&echo 1||echo 0
0
特别提示:
        经过实践,“=”和“!=”在[]中使用不需要转移,包含“>”和“<”的符号在[]中使用需要转移,对于数字不转义的结果未必会报错,但是结果可能不对

实际测试结果结论:
1、整数加双引号也是对的。
2、[[]]用-eq等的写法也是对的,[[]]用>写法也可能不对,只比较第一位,逻辑结果不对。
3、[]用>号的写法语法没错,逻辑结果不对。
工作场景:推荐[]的-eq的用法。
[root@web02 ~]# grep -w "\-eq" /etc/init.d/nfs
[ $RETVAL -eq 0 ] && RETVAL=$rval
[ $RETVAL -eq 0 ] && RETVAL=$rval
[ $RETVAL -eq 0 ] && RETVAL=$rval
[ $RETVAL -eq 0 ] && RETVAL=$rval
[ $RETVAL -eq 0 ] && RETVAL=$rval

逻辑操作符

在[]和test中使用 在[[]]中使用 说明
-a &&  and与,两端都为真,则真
-o || or或,两端有一个为真则真
not非,相反则为真
提示:
        !中文意思是反:与一个逻辑值相关的逻辑值
        -a 中文意思是(and|&&):两个逻辑值都为“真”,返回值才为“真”,反之为“假”
        -o 中文意思是或(or| ||):两个逻辑值只要有一个为“真”,返回值就为“真”
逻辑操作运算规则
结论:-a和&& 的运算规则:只有两端都是1才为真
真true         假false

举个例子
[root@web02 ~]# f1=/etc/rc.local;f2=/etc/services 
[root@web02 ~]# [ -f "$f1" -a -f "$f2" ]&&echo 1||echo 0
1
如果使用&&就会报错
[root@web02 ~]# [ -f "$f1" && -f "$f2" ]&&echo 1||echo 0
-bash: [: missing `]'
0
要想使用&&就加双括号
[root@web02 ~]# [[ -f "$f1" && -f "$f2" ]]&&echo 1||echo 0
1
==================================
[root@web02 ~]# [ $a -eq 2 -a $b -eq 2 ]&&echo 1||echo 0
0
[root@web02 ~]# [ $a -eq 1 -a $b -eq 2 ]&&echo 1||echo 0
1
[root@web02 ~]# [ $a -eq 3 -a $b -eq 3 ]&&echo 1||echo 0
0
[root@web02 ~]# [ $a -eq 3 -o $b -eq 3 ]&&echo 1||echo 0
0
[root@web02 ~]# [ $a -eq 1 -o $b -eq 3 ]&&echo 1||echo 0
1
[root@web02 ~]# [[ $a -eq 1 || $b -eq 3 ]]&&echo 1||echo 0
1
系统案例:
[root@web02 ~]# sed -n '87,90p' /etc/init.d/nfs
[ "$NFSD_MODULE" != "noload" -a -x /sbin/modprobe ] && {
/sbin/modprobe nfsd
[ -n "$RDMA_PORT" ] && /sbin/modprobe svcrdma
}
小结:逻辑操作符使用总结
[]中用-a,-o,!
[[]]中用&&,||,!
test用法和[]相同
多个[]之间以及多个[[]]之间,或者任意混合中间逻辑操作符都是&&或||
    特别声明:有关test,[],[[]]的操作符的用法,help test或man test查询第一手帮助。
综合实战案例:开发Shell脚本分别实现以定义变量,脚本传参以及read读入的方式比较2个整数大小。用条件表达式(禁止if)进行判断并以屏幕输出的方式提醒用户比较结果。注意。一共是开发3个脚本。当用脚本传参以及read读入的方式需要对变量是否为数字、并且传参个数不对给予提示。
第一种方法:
[root@web02 ~]# cat 1212.sh
#!/bin/sh
#no.1
[ $# -ne 2 ]&&{
  echo "USAGE:$0 num1 num2"
  exit 1
}
#no.2
a=$1
b=$2
expr $a + 1 &>/dev/null
[ $? -ne 0 ]&&{
    echo "First arg must be int."
    exit 2
}
expr $b + 1 &>/dev/null
[ $? -ne 0 ]&&{
    echo "Second arg must be int."
    exit 3
}
#no.3
[ $a -gt $b ]&&{
  echo "$a > $b"
  exit 0
}
[ $a -eq $b ]&&{
  echo "$a = $b"
  exit 0
}
[ $a -lt $b ]&&{
  echo "$a < $b"
  exit 0
}
第二种方式:
[root@web02 ~]# cat www.sh
#!/bin/sh
#no.1
read -p "Pls input two num:" a b
[ -z "$a" -o -z "$b" ]&&{
   echo "must be two num."
   exit 1
}
#no.2
expr $a + 1 &>/dev/null
[ $? -ne 0 ]&&{
    echo "First arg must be int."
    exit 2
}
expr $b + 1 &>/dev/null
[ $? -ne 0 ]&&{
    echo "Second arg must be int."
    exit 3
}
#no.3
[ $a -gt $b ]&&{
  echo "$a > $b"
  exit 0
}
[ $a -eq $b ]&&{
  echo "$a = $b"
  exit 0
}
[ $a -lt $b ]&&{
  echo "$a < $b"
  exit 0
}

综合案例:打印选择菜单

[root@web02 scripts]# cat install.sh 
#!/bin/bash
. /etc/init.d/functions 
export PATH
menu(){
cat <<END
    1.[install lamp]
    2.[install lnmp]
    3.[exit]
END
}
menu
read -p "pls input the num you want" a
case "$a" in
   1)
   action "正在安装lnmp" /bin/true
   exit 0
   ;;
   2)
   action "正在安装lamp" /bin/true
   exit 0
   ;;
   3)
   exit 0
   ;;
   [4-9])
   echo "请重新输入"
   exit 1
   ;;
esac
因为此脚本比较简单,我不详细介绍。下面可以看一下操作,因为很多地方没有定义直接设置为空,还需完善

分支与循环结构

[1] 单分支结构
语法:
if [ 条件 ]
   then
   指令
fi

if [ 条件 ];then
    指令
fi
[2] 双分支结构
语法:
 if  [ 条件 ]
then 
指令集1
else
    指令集2
fi
[3] 多分支结构
语法: 
if 条件1
then 
指令1
elif 条件2
then
指令2
else
    指令3
fi 
-----
 if 条件
then 
指令 
elif 条件
then 
指令 
elif 条件
then 
指令
... ...
else
    指令
fi

范例2:开发shell脚本判断系统剩余内存的大小,如果低于100M就邮件报警给管理员,并且系统定时任务每3分支执行一次检查。
思路:
    1.分析需求
    2.简单设计
        a.取当前内存大小
        b.判断是否大于10m,如果小于100M,就报警
        c.加入定时任务,每三分钟检查一次
    3.编码实现
[root@db01 scripts]# cat free.sh 
#!/bin/sh
mem=$(free -m|awk 'NR==3{print $NF}')
if [ $mem -lt 1000 ]
then
   echo "mem is not enough. $mem"
   echo "mem is not enough. $mem"|mail -s "`date` mem is not enough" 31333741-@qq.com
else
   echo ok
fi
[root@db01 scripts]# crontab -l
#time sync by oldboy at 2010-2-1
*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1
###########
*/3 * * * * /bin/sh /server/scripts/free.sh >/dev/null 2>&1
范例:使用read及脚本传参方式如何实现2个整数比较大小?
解答:
特别强调:read读入和命令行传参是两种输入内容的方法(两个脚本)
[root@db01 scripts]# cat read.sh 
#!/bin/sh
#no.1
read -p "Pls input two num:" a b
[ -z "$a" -o -z "$b" ]&&{
   echo "must be two num."
   exit 1
}
#no.2
expr $a + 1 &>/dev/null
[ $? -ne 0 ]&&{
    echo "First arg must be int."
    exit 2
}
expr $b + 1 &>/dev/null
[ $? -ne 0 ]&&{
    echo "Second arg must be int."
    exit 3
}
#no.3
[ $a -gt $b ]&&{
  echo "$a > $b"
  exit 0
}
[ $a -eq $b ]&&{
  echo "$a = $b"
  exit 0
}
[ $a -lt $b ]&&{
  echo "$a < $b"
  exit 0
}

未经允许不得转载:Linux 自动化运维之路~ » Shell 变量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575960.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java大作业私人管家系统_重庆管家婆软件丨管家婆工贸PRO的E-MES管理详解

其实&#xff0c;ERP和MES在制造操作中扮演着独立而又互补的角色。ERP能将企业所有方面的数据进行实时、可用的全面集成&#xff0c;为管理决策提供高效、准确的业务决策支持;MES则能加强MRP计划的执行&#xff0c;把MRP计划同车间作业现场控制通过执行系统联系起来。这些“现场…

监控体系 [精]

监控体系 zabbix 监控对象&#xff1a;     1. 监控对象的理解&#xff1a;CPU是怎么工作的&#xff0c;原理     2. 监控对象的指标&#xff1a;CPU使用率 CPU负载 CPU个数 上下文切换     3. 确定性能基准线&#xff1a;怎么样才算故障&#xff1f;CPU负载多…

vs 设置起始页不见了_发朋友圈屏蔽爸妈,结果不小心设置成了仅家人可见...场面一发不可收拾哈哈哈哈!...

一提到爸妈的朋友圈&#xff0c;就会想到养生鸡汤&#xff0c;中老年流量谣言&#xff0c;土味表情包而出于保护个人隐私拒绝被爸妈误解而遭受灵魂拷问的考虑很多人选择了两全其美的分组法给家人看到阳光可爱正能量的一面沙雕的一面只展现给沙雕网友们可如果不小心把屏蔽的内容…

KVM 安装

KVM介绍 Kernel-based Virtual Machine的简称&#xff0c;是一个开源的系统虚拟化模块&#xff0c;自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理&#xff0c;所以相对于Xen&#xff0c;其核心源码很少。KVM目前已成为学术界的主流VMM之…

彼聆智能语音机器人_电销行业的人工智能:智能语音电话机器人

随着人工智能的发展&#xff0c;越来越多的机器人出现在我们的日常生活中&#xff0c;用于电话营销公司的自动打电话机器人、快递公司用来送快递的机器人、餐厅里用来上菜的机器人&#xff0c;最近更是有一款会后空翻的机器人。机器人正活跃在各行各业中&#xff0c;代替人类去…

Shell 基础介绍 [1]

本文目录1.什么是Shell&#xff1f;2.脚本语言类型3.其他常用的脚本语句种类4.Shell脚本的建立和执行5.Shell 变量类型6.普通变量7.Shell 特殊重要变量8.Shell进程状态变量9.Parameter Expansion10.扩展&#xff1a;其他变量的替换11.变量的数值&#xff08;整数&#xff09;计…

c++创建二叉树_数据结构:查找(4)|| 平衡二叉树

在介绍平衡二叉树之前&#xff0c;应该先了解平衡因子的概念&#xff0c;平衡因子定义为左子树深度减去右子树深度&#xff0c;这个值的绝对值越大&#xff0c;非常容易理解它就对应着越不平衡的情况。一棵平衡的二叉树的平衡因子只能是1&#xff0c;0&#xff0c;-1如何构建一…

华睿相机sdk 开发_索尼发布相机远程操作SDK(软件开发工具包)

索尼从2020年12月9日开始&#xff0c;向开发者免费提供针对索尼数码相机的软件开发工具包“ Camera Remote SDK” 1.03版。“ Camera Remote SDK”开发的软件可以远程更改相机设置、并执行诸如快门释放&#xff0c;实时取景监视(如取景和对焦)之类的操作。支持的操作系统包括Wi…

Linux 字体颜色设置

本文主要介绍Linux 字体颜色的调整&#xff0c;常用于shell脚本当中。我们举一个例子&#xff1a;echo-e"\033[44;37;5m ME \033[0m COOL" 以上命令设置背景成为蓝色&#xff0c;前景白色&#xff0c;闪烁光标&#xff0c;输出字符“ME”&#xff0c;然后重新设置屏幕…

利用Unity实现AOP

.NET程序中&#xff0c;可以利用Unity来实现AOP&#xff0c;用来进行日志、缓存或权限的处理。这里我们来写一个简单的程序&#xff0c;让其实现简单的AOP功能。 1.使用NuGet&#xff0c;在项目中获取Microsoft.Practices.Unity。 2.新建一个ITalk类及其实现 public interface …

javascript数组的各种操作

用 js有非常久了&#xff0c;但都没有深究过js的数组形式。偶尔用用也就是简单的string.split(char)。这段时间做的一个项目&#xff0c;用到数组的地方非常多&#xff0c;自以为js高手的自己竟然无从下手&#xff0c;一下狠心&#xff0c;我学&#xff01;呵呵。学了之后才知道…

老男孩Shell企业面试题30道 [答案]

老男孩Shell企业面试题 shell 2016年9月7日 本文来自于老男孩教育,未经本人同意&#xff0c;禁止转载&#xff01;否则追究法律责任。 原文&#xff1a;http://oldboy.blog.51cto.com/2561410/1632876 企业面试题1&#xff1a; &#xff08;生产实战案例&#xff09;&#x…

深度优化LNMP之Nginx [1]

Nginx基本安全优化 1.调整参数隐藏Nginx版本号信息一般来说&#xff0c;软件的漏洞都和版本有关&#xff0c;因此我们应尽量隐藏或清除Web服务队访问的用户显示各类敏感信息&#xff08;例如&#xff1a;Web软件名称及版本号等信息&#xff09;&#xff0c;这样恶意的用户就很难…

5阶无向完全图_运动轿跑风 全新上汽名爵5预告图发布

【太平洋汽车网 新车频道】近日&#xff0c;上汽名爵官方发布了一组全新一代名爵5&#xff08;询底价|查参配&#xff09;的预告图。从图片可以看出&#xff0c;换代而来的全新名爵5采用最新的家族化设计语言&#xff0c;外观风格与新款名爵6较为接近&#xff0c;采用轿跑式溜背…

Shell 企业29道面试题 [转]

企业面试题1&#xff1a;&#xff08;生产实战案例&#xff09;&#xff1a;监控MySQL主从同步是否异常&#xff0c;如果异常&#xff0c;则发送短信或者邮件给管理员。提示&#xff1a;如果没主从同步环境,可以用下面文本放到文件里读取来模拟&#xff1a; 阶段1&#xff1a;开…

深度优化LNMP之Nginx [2]

配置Nginx gzip 压缩实现性能优化 1.Nginx gzip压缩功能介绍 Nginx gzuo压缩模块提供了压缩文件内容的功能&#xff0c;用户请求的内容在发送出用客户端之前&#xff0c;Nginx服务器会根据一些具体的策略实施压缩&#xff0c;以节约网站出口带宽&#xff0c;同时加快了数据传…

go int 转切片_一文掌握GO语言实战技能(二)

Go 数组Go 切片Go 变量和内存地址Go Map 类型Go 面向对象编程Go 方法的定义GO 数组数组是同一类型的元素集合。Go中的数组下标从0开始&#xff0c;因此长度为n的数组下标范围是[0, n-1]。整数数组中元素默认初始化为0&#xff0c;字符串数组中的元素默认初始化为""。…

设置固定长度_加气块砌筑(构造柱、圈梁设置)技术交底21条

墙体砌筑技术交底我给下发21条&#xff0c;内容不全&#xff0c;砌筑的墙体观感差&#xff0c;欢迎大家提出宝贵意见1、填充墙的材料、平面位置尺寸见建筑施工图纸&#xff0c;不得随意更改。2、当首层填充墙下无基础梁或结构梁板时&#xff0c;墙下应做基础&#xff0c;基础作…

深度优化LNMP之MySQL

MySQL数据库优化框架体系 1.硬件层面优化 2.操作系统层面优化 3.MySQL数据库层面优化 4.MySQL安全优化 5.网站集群架构上的优化 6.MySQL流程、制度控制优化 硬件层面优化 1、数据库物理机采购 CPU&#xff1a; 64位CPU&#xff0c;一台机器2-16颗CPU。至少2-4颗&#xff0…

element vue 纵向滑动条_Vue 部分

1、ES6Vue &#xff1a;1、Vue 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项目整合。另一方面&#xff0c;当与现代化的…