变量只在当前shell下生效,子shell不会生效;
要想子shell也生效,使用export file 声明变量;
用户交互的变量:
[root@localhost shell]# cat 2.sh
#!/bin/bash
#与用户交互的变量
read -p "请输入一个数字:" num
echo $num
[root@localhost shell]# sh 2.sh
请输入一个数字:333
333
参数的变量:
[root@localhost shell]# cat 3.sh
#!/bin/bash
#关于参数的变量
echo "\$1=$1"
echo "\$2=$2"
echo "\$3=$3"
echo "\$#=$#"
echo "\$0=$0"
[root@localhost shell]# sh 3.sh ABC linux world
$1=ABC
$2=linux
$3=world
$#=3
$0=3.sh
数值变量:
12345678910 [root@localhost shell]# a=1;b=2
[root@localhost shell]# c=$a+$b
[root@localhost shell]# echo $c
1+2
[root@localhost shell]# c=$[$a+$b]
[root@localhost shell]# echo $c
3
[root@localhost shell]# c=$(($a+$b))
[root@localhost shell]# echo $c
3
5、shell中的逻辑判断
格式1:if 条件 ; then 语句; fi
格式2:if 条件; then 语句; else 语句; fi
格式3:if …; then … ;elif …; then …; else …; fi
逻辑判断表达式:if [ $a -gt $b ]; if [ $a -lt 5 ]; if [ $b -eq 10 ]等;注意到处都是空格。
可以使用 &&并且 || 或者 结合多个条件
大于>gt (greater than)
小于< lt (less than)
大于等于 >= ge
小于等于 <= le
等于 ==eq (equal)
不等于 != ne
实验练习:
[root@localhost shell]# cat if.sh
#!/bin/bash
#if判断语句,条件为真,打印true;
if :
then
echo true
fi
[root@localhost shell]# sh if.sh
true
if判断语句2;
[root@localhost shell]# cat if2.sh
#!/bin/bash
#if判断语句,条件为真,返回true;
if [ 1 == 1 ]
then
echo "true"
fi
[root@localhost shell]# sh -x if2.sh
+ '[' 1 == 1 ']'
+ echo true
true
[root@localhost shell]# sh if2.sh
true
if判断语句3;
[root@localhost shell]# cat if3.sh
#!/bin/bash
#if判断语句,条件为真返回true,条件为假,返回false;
if [ "1" == "2" ]
then
echo "true"
else
echo "false"
fi
[root@localhost shell]# sh if3.sh
false
变量,进行比较
[root@localhost shell]# cat if4.sh
#!/bin/bash
#if判断语句,变量进行比较;
a=1
if [ "$a" == "2" ]
then
echo "true"
else
echo "false"
fi
[root@localhost shell]# sh -x if4.sh
+ a=1
+ '[' 1 == 2 ']'
+ echo false
false
多个判断要加elif
[root@localhost shell]# cat if5.sh
#!/bin/bash
#if判断语句,多个判断使用elif;
a=1
if [ "$a" == "2" ]
then
echo "true"
elif [ "$a" -lt 10 ]
then
echo "no false"
else
echo "false"
fi
[root@localhost shell]# sh if5.sh
no false
[ $a -lt 3 ] 也可以这样代替 (($a<3));使用方括号请一定注意空格;
1234 [root@localhost shell]# a=1;if(($a<3)); then echo OK;fi
OK
[root@localhost shell]# a=1;if [ $a -lt 3 ]; then echo OK;fi
OK
&& 并且 前面的执行成功后才执行后面的;
|| 或者 前面的执行不成功执行后面的;
12345 [root@localhost shell]# a=5
[root@localhost shell]# if [ $a -lt 10 ]&&[ $a -gt 2 ];then echo OK;fi
OK
[root@localhost shell]# if [ $a -lt 10 ]||[ $a -gt 2 ];then echo OK;fi
OK
奇数偶数判断,输入的数字除以2,余数为0为偶数,非0为奇数;
[root@yonglinux shell]# cat 4.sh
#!/bin/bash
read -p "enter a number:" n
n1=$[$n%2]
if [ $n1 -eq 0 ]
then
echo "你输入的数字是偶数"
else
echo "你输入的数字是奇数"
fi
[root@yonglinux shell]# sh 4.sh
enter a number:23
你输入的数字是奇数
[root@yonglinux shell]# sh 4.sh
enter a number:90
你输入的数字是偶数
判断输入的是否是数字,不是数字的直接退出;数字的话判断奇数或偶数;
`echo $n|grep -c '[^0-9]'` 匹配输入的字符为非数字的行数,如果为1说明不是数字。
[root@localhost shell]# cat 5.sh
#!/bin/bash
#判断输入的是否是数字,不是数字的直接退出;数字的话判断是奇数或偶数;
read -p "请输入一个数字:" n
n2=`echo $n|grep -c '[^0-9]'`
if [ $n2 -eq 1 ]
then
echo "你输入的不是纯数字,请重新输入"
exit 1
fi
n1=$[$n%2]
if [ $n1 -eq 0 ]
then
echo "你输入的数字是偶数"
else
echo "你输入的数字是奇数"
fi
[root@localhost shell]# sh 5.sh
请输入一个数字:abc
你输入的不是纯数字,请重新输入
[root@localhost shell]# sh 5.sh
请输入一个数字:323
你输入的数字是奇数