[bash]总结

传递参数:

./test.sh 1 2 3

$0执行的脚本名./test.sh

$1传入的第一个参数1

$2传入的第二个参数2

$*传入参数汇总为一个字符串"1 2 3"

$@传入参数分割为多个字串“1” “2” “3”

$#传入参数个数3

$?最后一次命令返回值0表示没错误


数组:

array=(1 2 3)
array[0]=0
array[1]=1
array[2]=2
array[4]=4

第3个元素=$array[2]

数组元素个数=${#array[*]}4注意是4个,并不是5个

数组元素个数=${#array[@]}

计算数组元素个数时,如果中间某个为空,则不计数


运算符:

数学运算+ - * / = == !=`expr $a \* $b`注意*需要转义

关系运算-eq -nq -gt -lt -ge -le分别为=equal   !=not equal   >greater then   <less then   >=greater then or equal   <=less then or equal  注意:不能用> < 作比较,会被当作重定向处理!

逻辑运算-a -o ! && || and or 非 and or  注意&& || 需要用双方括号[[ ... && ... ]]

字符运算= != -z -n str本身相等 不等 长度为0 长度不为0 字串是否为空

文件运算-b -c -d -e -f -p -s -r -w -x block块设备文件 char字符设备 dir文件夹 exist文件存在 file普通文件 pipe有名管道文件 size文件大小是否为0 read write execute


echo:

-e开启转义(默认不开启)

-c不换行执行命令

``原样输出,不进行变量替换


printf:

printf "%-10s %-4.2f \t \v \n \b \\" 小明 46.5656

左对齐宽度为10

浮点左对齐,保留两位小数

水平tab

垂直tab

换行

退格

\


控制流程:

if [  ];then
     echo ""
eif [  ];then
    echo ""
else
    echo ""
fi
for i in array;do
    echo $i
done
while (($a < 10));do
    let "a++"
    if [ $a -eq 5 ];then
        continue               #本次循环结束,进行下一次
    elif [ $a -eq 8 ];then
        break                  #退出循环
    fi
done
while true;do
    echo ""
done
for ((;;));do
    echo ""
done
until [ $a -eq 4 ];do
    echo ""
done
case $a in                     #注意不要落下in
1) echo ""                     #格式:条件+)
    ;;                         #两个分号相当于break
2) echo ""
    ;;
*) echo "not found"            #*)相当于default
    ;;
esac

函数:

func_name() {
    echo "第一个参数=$1"
    echo "第十个参数=${10}"                #注意>=10时要加大括号
    echo "参数个数=$#"
    a=123
    return $a
}
func_name 1 2 3 4 5 6 7 8 9 10             #函数调用
echo $?                                    #输出123,$?打印函数返回值

重定向:

把标准输出重定向到null文件,同时把标准错误也合并到标准输出,null文件的意义为相当于把stdout和stderr直接丢弃

./test.sh > /dev/null 2>&1

把标准错误和标准输出,打印到终端里,同时记录到out.log中

./test.sh 2>&1 |tee out.log


例1:解压目录下所有.tar.gz压缩包到各自目录下

for file in *
do
	extName=${file##*.}

	if [ $extName == "gz" -o $extName == "tar" ];then
		basename=${file%%.*}
		destDir="`pwd`/${basename}/"
		echo "decompression ${file} to ${destDir}"
		mkdir -p ${destDir}
		tar -xf	$file -C ${destDir}
	else
		echo "do nothing."
	fi
done

备注:${file%%.*} 去掉第一个匹配.*的侧的所有字符(%在$侧,1个%就是最后一个,2个%就是第一个)

            ${file##*.} 去掉最后一个匹配*.的侧的所有字符(#在$侧,1个%就是第一个,2个%就是最后一个)

例2:遍历所有的 /dev/sd? 设备,查找大小为8G的设备结点

func2()
{
	for dev in `ls /dev/sd?`
	do
		size=`sudo lsblk ${dev} |sed -n 2p |awk '{print $4}'`
		if [ "${size}" == "50G" ]; then
			echo "find ${dev} is 50G"
		fi
	done
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值