一、参数替换
两种方式
//当参数未被声明的时候,取-号后面的参数
unset username
username=${
username -"zhansan"}
echo $username
//当变量已经被声明但是被声明为null的时候取:-后面的参数
username=
username=${
username:-"zhansan"}
echo $username
当变量未被set的时候,设置=后面的参数为变量的值
unset usename
echo ${
username='lisi'}
当变量被set为空(null)的时候,设置:=后面的参数为变量的值
username=
echo ${
username:='lisi'}
当变量被set的时候,设置+后面的参数为变量的值,否则设置为null
unset usename
echo ${
username+'lisi'}
当变量被set为空(null)的时候,设置:+后面的参数为变量的值
username=
echo ${
username:+'lisi'}
测试参数是否被set 如果没有 打印errormsg
unset username
echo ${
username?'error:unset varaible username'}
当参数被set为null的时候 ,打印errormsg
username=
echo ${
username:?'error:set varaible username to null'}
测试变量是否被set
: ${username?} # :后面需要加空格,该命令不会被输出,除非变量没有被设置
根据变量查看被声明的变量
echo ${!varprefix*}
二、随机数
#$RANDOM
RANGE=20
#范围随机数
let "number=$RANDOM % $RANGE"
echo $number
三、输出数组长度
array=(1,2,3)
echo ${#array[*]) echo ${#array[@]}
四、for循环
list="file1.txt file2.txt file3.txt"
for file in $list
do
echo $file
done
没有参数的for循环会自动使用位置参数
for i
do
echo $i # $1 $2........
done
for 循环在二进制文件中查找字符串
for word in $( strings "$2" | grep "$1" )
do
echo $word
done
c语言风格的for 循环
for ((i=0;i<10;i++) 没有$符号
do
echo $i
done
for ((i=0,j=0;i<10;i++,j++) 没有$符号,同时对两个变量加一
do
echo $i
done
while 的多条件循环,只有最后一个条件可以控制循环
while echo "previous-variable = $previous"
echo
previous=$var1
[ "$var1" != end ]
do
echo "while condition running"
done
实例
a=1
b=3
while [ $a -lt 10 ]
[ $b -lt 10 ]
[ $a -lt $b ]
do
let "a++"
echo "running: \$a=$a ; \$b=$b"
done
echo “--------------------”
五控制台输出不同颜色的字体
格式
echo -e “\E[30;41]myourword” # -e 用于输出转义字符,这里的作用是输出颜色 ‘\E[’ 开始转义,’]m’ 转义结束 ,30为前景色黑色,41为背景色红色,两者的先后书写顺序不会影响输出结果,因为前景色和背景色使用不同的编号来标识。
#!/bin/bash
#测试脚本 cecho.sh
black='\E[30;47m'
red='\E[31;47m'
green='\E[32;47m'
yello='\E[33;47m'
blue='\E[34;47m'
magenta='\E[35;47m'
cyan='\E[36;47m'
white='\E[37;47m'
alias Reset="tput sgr0"
cecho(){
local default_msg="no message"
message=${1:-$default_msg}
color=${2:-$black}
echo -e "$color"
echo "$message"
Reset
return
}
cecho "feeling blue" $blue
cecho "feeling yellow" $yellow
cecho "feeling cyan" $cyan
cecho "feeling red" $red
cecho "feeling black" $black
cecho "feeling green" $green