查看系统的全局变量
##1. 查看当前系统中的所有的全局/系统变量
[root@localhost ~]# set
##2. 查看指定的变量指
[root@hadoop ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/apps/jdk1.8.0_45/bin:/opt/apps/tomcat-7.0.47/bin:/root/bin
##3. 自定义变量
[root@localhost ~]# a=1
[root@localhost ~]# set
a=1
##4. 撤销变量
[root@localhost ~]# unset a
变量的范围
##1. 查看当前系统中的所有的全局/系统变量
[root@localhost ~]# set
##2. 查看指定的变量指
[root@hadoop ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/apps/jdk1.8.0_45/bin:/opt/apps/tomcat-7.0.47/bin:/root/bin
##3. 自定义变量
[root@localhost ~]# a=1
[root@localhost ~]# set
a=1
##4. 撤销变量
[root@localhost ~]# unset a
静态变量
##1. 定义静态变量
[root@localhost tmp]# readonly a=1
##2. 静态变量不能撤销
[root@localhost tmp]# unset a
-bash: unset: a: cannot unset: readonly variable
特殊变量
##1. $? : 表示查询上一个命令的结果
[root@localhost tmp]# echo $?
1
[root@localhost tmp]# echo "123"
123
[root@localhost tmp]# echo $?
0
[root@localhost tmp]# safbabsd
-bash: safbabsd: command not found
[root@localhost tmp]# echo $?
127
## tip : 0表示成功,除此之外都是表示错误的代码
##2. $$ : 查看当前进程的编号
[root@localhost ~]# echo $$
6436
##3. $0 : 获取当前的脚本名称
[root@localhost tmp]# vi shelltest.sh
#!/bin/bash
name=$0
echo $name
[root@localhost tmp]# sh shelltest.sh
shelltest.sh
##4. $n : n表示1-9的数字。表示的是输入参数之意
[root@localhost tmp]# vi shelltest.sh
#!/bin/bash
arg1=$1
arg2=$2
echo "$arg1 - $arg2"
[root@localhost tmp]# sh shelltest.sh
-
[root@localhost tmp]# sh shelltest.sh 1 2
1 - 2
[root@localhost tmp]# sh shelltest.sh lixi nb
lixi - nb
[root@localhost tmp]# sh shelltest.sh lixi nb 11
lixi - nb
##5. $# : #表示变量的个数
[root@localhost tmp]# vi shelltest.sh
arg1=$1
arg2=$2
echo "$arg1 - $arg2"
echo $#
[root@localhost tmp]# sh shelltest.sh lixi nb 11
lixi - nb
3
[root@localhost tmp]# sh shelltest.sh lixi nb
lixi - nb
2
[root@localhost tmp]# sh shelltest.sh lixi
lixi -
1
##6. $* 和 $@
##6.1 基本使用
[root@localhost tmp]# vi shelltest.sh
#!/bin/bash
echo '$*'
echo $*
echo '$@'
echo $@
[root@localhost tmp]# sh shelltest.sh lixi lidong linan libei
$*
lixi lidong linan libei
$@
lixi lidong linan libei
## $* 和 $@的区别
## $* :把被传入的参数当作是一个整体的字符串,而$@将参数存放到一个数组之中。
##6.2 举例对比
[root@localhost tmp]# vi shelltest.sh
#!/bin/bash
echo '$*'
for n in "$*" ## 类似于foreach
do ## {
echo $n
done ## }
echo '$@'
for n2 in "$@" ## 类似于foreach
do ## {
echo $n2
done ## }
[root@localhost tmp]# sh shelltest.sh lixi lidong linan libei
$*
lixi lidong linan libei
$@
lixi
lidong
linan
libei
if语句
#!/bin/bash
if [ $1 -ge 10 ]
then
echo "你输入的值大于10"
elif [ $1 -lt 10 ]
then
echo "你输入的值小于10"
else
echo "你输入的不对"
fi
case语句
#!/bin/bash
#case语句
case $1 in
1|2|3|4|5)
echo "你输入的值在1~5之间"
;;
*)
echo "你输入的值不在1~5之间"
;;
esac
for语句
#!/bin/bash
#for语句
for i in $*
do
echo "i的值为:"$i
done
echo "======================="
for n in {1..3}
do
echo "1111"
done
echo "======================="
for ((i=0;i<4;i++))
do
echo "i的值为:"$i
done
while
#!/bin/bash
#while
read -p "请你输入一个大于5的数:" num
#$num获取该值
while [ $num -gt 5 ]
do
echo "加油"
#此时的num是定值,不需要$进行获取,直接进行--
let num--
done
echo "===================="
while (($num>2))
do
echo "中国"
let num--
done
read
read -p(提示)
-n(字符个数)
-t(等待时间)
算数判断
-gt:大于 >
-lt: 小于 <
-ge:大于等于 >=
-le:小于等于 <=
-eq:等于 =
-ne:不等于 !=
权限判断
-r:判断一个文件是否具备读权限
-w:判断一个文件是否具备写权限
-x:判断一个文件是否具备执行权限
-f:判断是否为一个常规的文件
-d:判断目录
-b:判断是否为设备备件
? /tmp [ -f tmp4.sh ]
? /tmp echo $?
0
函数
#!/bin/bash
function sum()
{
echo "111"
}
sum
#这里调用的时候不用加括号
echo "===================="
arg()
{
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "第n个参数:"$10
echo "第11个参数:${11}"
echo "参数的总个数:$#"
echo "奖参数当作是一个整体的字符串:$*"
}
arg 1 2 3 4 5 6 7 8 9 20 21 23
跨脚本调用函数
在跨脚本调用函数中
在该脚本中要标明要调用的脚本的绝对路径
#!/bin/bash
. /tmp/function.sh()
arg 1 2 3 4 5 6 7 8 9 20 21
|