1、位置变量 $$ 返回程序的PID $0 代表脚本本身名 $1 代表脚本运行时接的第一个参数(常用) $2 代表脚本运行时接的第二个参数 $3 代表脚本运行时接的第三个参数 $* 代表所有参数 $@ 也是代表所有参数 $# 显示后面接的参数的个数 $? 上一条命令执行成功则返回0,失败则返回非0 (常用) 2、变量运算 常用的数值计算命令: (())、let、expr、bc、$[] # a=100 # b=200 # c=$(($a+$b)) --算术运算,只能计算整数,二个括号,不能少 # c=$[$a+$b] --算术运算,只能计算整数 # let c=a+b --算术运算,只能计算整数 # expr $a + $b --算术运算,只能计算整数 ,注意格式,等号两侧有空格 # a=3.14 # b=1.23 # echo "$a+$b" | bc --算术运算,整数小数都能计算,bc是一个计算器 4.37 bc是一个计算器 # bc 无论是整数还是小数都可以使用bc来计算,用 | 管道传入即可 3、逻辑判断与顺序 ; --前面执行完,不管成功与否,都执行后面 没有逻辑关系 && --前面执行成功,才执行后面;前面执行失败,后边不执行 逻辑与 || --前面执行失败,才执行后面;前面执行成功,后边不执行 逻辑或 ; && || 这些符号都是连接命令 --正确判断方法: # ls /test/ && echo 'existed' || echo 'not existed' --错误判断方法: # ls /testfsdafas/ || echo 'existed' && echo 'not existed' 二. 条件判断 1. 条件判断语法 [语法] 格式1:test<测试表达式> --不常用 例:test -f 1.txt && echo 1||echo 0 格式2:[<测试表达式>] --常用 例:[ -f 1.txt ] && echo 1||echo 0 格式3:[[<测试表达式>]] --不常用 例:[[ -f 1.txt ]] && echo 1||echo 0 2. 各种条件判断 (1)文件存在和文件类型的判断 -e 是否存在(exist) -f 是否为普通文件 -d 是否为目录 -S socket文件 -p pipe 管理文件 -c character字符文件 -b block块文件 -L 软连接 # test -f 1.txt && echo 1||echo 0 1 # [ -f 1.txt ] && echo 1||echo 0 --注意表达式与[]前后各有一个空格 1 # [[ -f 1.txt ]] && echo 1||echo 0 --注意表达式与[]前后各有一个空格 1 # [[ ! -f 1.txt ]] && echo 1||echo 0 0 输入一个文件,判断它属于哪种类型 #!/bin/bash read -p "请输入一个文件名:" filename [ -e $filename ] || echo "文件不存在" [ -f $filename ] && echo "${filename}是普通文件" [ -d $filename ] && echo "${filename}是目录" [ -S $filename ] && echo "${filename}是socket文件" [ -p $filename ] && echo "${filename}是管道文件" [ -c $filename ] && echo "${filename}是字符文件" [ -b $filename ] && echo "${filename}是块文件" [ -L $filename ] && echo "${filename}是软链接文件" -------------------------------------------- #!/bin/bash [ -e $1 ] || echo "文件不存在" [ -f $1 ] && echo "${1}是普通文件" [ -d $1 ] && echo "${1}是目录" [ -S $1 ] && echo "${1}是socket文件" [ -p $1 ] && echo "${1}是管道文件" [ -c $1 ] && echo "${1}是字符文件" [ -b $1 ] && echo "${1}是块文件" [ -L $1 ] && echo "${1}是软链接文件" (2)文件权限相关的判断 -r 当前用户对其是否可读 --对于普通用户有效,root用户不准确(rw不准) -w 当前用户对其是否可写 -x 当前用户对其是否可执行 --常用 -u 是否有suid -g 是否sgid -k 是否有t位 -s 是否为空白文件 --不为空是真,为空是假 #!/bin/sh [ -e $1 ] || echo "文件不存在" [ -x $1 ] && sh $1 || echo "没有执行权限" (3)两个文件的比较判断 file1 -nt file2 比较file1是否比file2新 (new than) file1 -ot file2 比较file1是否比file2旧 (old than) file1 -ef file2 比较是否为同一个文件 (4)整数之间的判断 -eq 相等 -ne 不等 -gt 大于 -lt 小于 -ge 大于等于 -le 小于等于 (5)字符串之间的判断 -z 是否为空字符串 --判断变量是否为空 -n 是否为非空字符串 string1 = string2 是否相等 string1 != string2 不等 # a= # [ -z $a ] && echo 1 || echo 0 1 # a=1 # [ -z $a ] && echo 1 || echo 0 0 (6)逻辑判断 -a 两个条件同时满足,才为true -o 两者满足其一,就为true ! 非 (7) 判断的三种格式的区别 在(())中使用(算术运算) 在[]和[[]]中使用(算术运算) 说明 == -eq equal,等于 != -ne not equal,不等于 > -gt greater than,大于 >= -ge greater equal,大于等于 < -lt less than,小于 <= -le less equal,小于等于 在[]中使用的逻辑操作符 在[[]]中使用的逻辑操作符 说明 -a && 与 -o || 或 ! ! 非 # [ -e install.log -a -f install.log ] && cat install.log || echo "文件不存在" # [ -e 1.sh -a -x 1.sh ] && ./1.sh || echo "文件不存在或者文件没有执行权限" # [[ -e 1.sh && -x 1.sh ]] && ./1.sh || echo "文件不存在或者文件没有执行权限" 3. 分支结构 (1)单分支结构 if condition(条件,真或假) then --要么单独一行,要么在if后面,要加一个分号 statement fi 或 if condition;then statement fi if(如果/假设) 条件(真/假) --条件为真时,就执行代码 then(那么) 代码; fi (2)双分支结构 if condition(条件,真或假) then statement --条件为真,执行的部分 else statement --条件为假,执行的部分 fi (3)多分支结构 if condition(条件,真或假) then statement elif condition then statement elif condition then statement else statement fi
输入一个文件,判断是否存在,以及文件类型 #!/bin/bash [ -e $1 ] && echo "文件存在" || echo "文件不存在" [ -f $1 ] && echo "${1}是普通文件" [ -d $1 ] && echo "${1}是目录" [ -S $1 ] && echo "${1}是socket文件" [ -p $1 ] && echo "${1}是管道文件" [ -c $1 ] && echo "${1}是字符文件" [ -b $1 ] && echo "${1}是块文件" [ -L $1 ] && echo "${1}是软链接文件" ----------------------------- 输入一个文件判断文件类型 if的单分支: #!/bin/bash if [ -e $1 ];then echo "文件存在" fi # 用逻辑操作符来判断文件不存在 if [ ! -e $1 ];then echo "文件不存在" fi # 判断文件类型 if [ -f $1 ];then echo "$1是普通文件" fi if [ -d $1 ];then echo "$1是目录文件" fi if [ -S $1 ];then echo "$1是socket文件" fi if [ -p $1 ];then echo "$1是管道文件" fi if [ -c $1 ];then echo "$1是字符文件" fi if [ -b $1 ];then echo "$1是块文件" fi if [ -L $1 ];then echo "$1是链接文件" fi ---------------------------- 双分支和多分支 # 判断文件是否存在 #!/bin/bash # 判断文件是否存在 if [ -e $1 ] then echo "文件存在" else echo "文件不存在" fi # 判断文件类型 if [ -f $1 ];then echo "${1}是普通文件" elif [ -d $1 ];then echo "${1}是目录" elif [ -S $1 ];then echo "${1}是socket文件" elif [ -p $1 ];then echo "${1}是管道文件" elif [ -c $1 ];then echo "${1}是字符文件" elif [ -b $1 ];then echo "${1}是块文件" else echo "${1}是软链接文件" fi ------------------------------------------- 如何判断一台主机是否在线? #!/bin/bash ping $1 -c 2 &> /dev/null if (( $? == 0 )) ;then echo "$1在线" else echo "$1不在线" fi ----------- #!/bin/bash ping $1 -c 2 &> /dev/null if [ $? -eq 0 ];then echo "$1在线" else echo "$1不在线" fi