bash学习总结(一)

来源:互联网 发布:数据粒度的描述 编辑:程序博客网 时间:2024/04/30 19:03

1、变量名可变的用法:

var='name'

let "`echo $var`="jams"

echo $name

 

2、命令组:

(a=hello; echo $a)

将会作为子shell来运行,括号中的变量,对于脚本剩下的部分不可用。

这一点与{}代码块是不同的,所以函数里的变量都是全局。

 

3、管道“|”,会起一个子shell,里面的变量对父进程是不可用的,这一点特别需要注意,特别是用在while中。

要想父子shell共享变量,可以用如下的进程替换方法:

while read line; do

let "i+=1"

#echo "i=$i"

if [ "$i" = "1" ]

then

texts=`echo "$line" | tr " " "/n"`

j=1

for t in $texts

do

#echo "j=$j"

if [ "$j" = "2" ]

then

code=$t

#echo "code=$code"

let "finished+=1"

break

fi

let "j+=1"

done

continue

fi

 

done< <(echo "$headers")  # 进程替换

echo $code

 

4、用“:”分隔子符串

pos=`expr index "$line" " "`

#echo "pos=$pos"

if (( pos >= 0 ))  

then

length=${line:$pos}

#echo "length=$length"

let "finished+=1"

fi

5、算术表达式测试

pos=10

if (( pos >= 0 ))

then

    echo ">0"

fi

 

6、合并的条件测试

if [[ -n "$a" && "$a" -eq "yes" ]]

then

    echo "yes"

fi

或者

if [ -n "$a" ] && [ "$a" -eq "yes" ]

then

    echo "yes"

fi

 

7、数组元素

a[1]=10

echo ${a[1]}

 

8、对整形变量,要先声明:

declare -i b

b=10

b+=102

 

9、getopts处理可变参数

#!/bin/bash

 

while getopts 'd:Dm:f:t' OPT; do

    case $OPT in

        d)

            DEL_DAYS="$OPTARG";;

        D)

            DEL_ORIGINAL='yes';;

        f)

            DIR_FROM="$OPTARG";;

        m)

            MAILDIR_NAME="$OPTARG";;

        t)

            DIR_TO="$OPTARG";;

        ?)

            echo "Usage: `basename $0` [options] filename"

    esac

done

 

shift $(($OPTIND-1))

 

echo "DEL_DAYS=$DEL_DAYS"

echo "DEL_ORIGINAL=$DEL_ORIGINAL"

echo "DIR_FROM=$DIR_FROM"

echo "MAILDIR_NAME=$MAILDIR_NAME"

其中:

getopts后面的字符串就是可以使用的选项列表,每个字母代表一个选项,后面带:的意味着选项除了定义本身之外,还会带上一个参数作为选项的值,比如d:在实际的使用中就会对应-d 30,选项的值就是30;getopts字符串中没有跟随:的是开关型选项,不需要再指定值,相当于true/false,只要带了这个参数就是true。如果命令行中包含了没有在getopts列表中的选项,会有警告信息,如果在整个getopts字符串前面也加上个:,就能消除警告信息了。

 

8、显示转义字符

echo -e "/n"

显示时不换行

a="abc"

echo -n "$a"

 

9、字符串比较:

> < = -n -z

整数比较:

-gt -lt -eq 

逻辑比较

-a 逻辑与, -o 逻辑或

 

10、算术运算

n=1

let "n+=1"

(( n++ ))

(( n+=5 ))