Bash编程入门

变量

​ 变量可以直接复制,并且可以多次赋值,需要注意的是=两边不能有空格。使用的时候,前边加$即可,如果是嵌入一个长字符串中,需要使用${Val}。另外shell中没有数据类型的概念,默认都是字符串。此外变量可以用在命令的任何地方。shell在扫描的时候,先做变量替换,再做文件名替换,最后处理命令的参数。如果需要数字运算可以使用(())

your_name="haha"
echo $your_name # haha 

参数传递

​ 脚本在执行的时候,可以直接加在后面传递参数,在脚本中通过$1,$2…来获取对应的参数(大于10,则需要通过$(n)的形式)。通过$#获取传入参数的个数。

条件语句

格式

if command
then
	command
	command
	...
elif command2
then
    command
    command
    ...
else
	command
	command
	...
fi
# 其中判断的条件可以用test expression 或者 [ expression ]
# 逻辑操作符 与:-a; 或 -o ; 非:!

例子

一个判断用户是否登录的程序

根据当前时间显示不同的问候语

case用法的例子,将数字转成英文

循环语句

# 格式1
for var in word1 word2 ... wordn
do
	command
	command
	...
done

# 格式2
while command1
do
	command
	command
	...
done
# 格式3
until command1
do
	command
	command
	...
done
## break , continue的语义同一般编程语言一样

$@,$#在for中解析的区别

标准输入输出及I/O重定向

linux/Unix的每个进程运行的时候都会打开三个文件,标准输出(stdin),标准输出(stdout),标准错误(stderr)。对应的文件描述符为0,1,2.默认会从键盘读入,将输出和错误信息发送到显示器。如果需要将输入/输出从定向到其他的地方,就要借助重定向命令来实现。输出重定向命令为<,输出重定向命令为>.

# 输入重定向命令
command < input_file
# 输出重定向命令
command > output_file
# 输出附加定向命令
command >> outpur_file
# 标准错误重定向命令
command 2> error_file
# read命令 从标准输入读取
read val val2 ...
# 输出到标准输出
echo val1 val2 ...

管道

​ 符号为|,即将前一个文件的输出当作后一个文件的输入。

函数

格式

function function_name {
command...
}

function_name () { 
command...
}

# 一个例子
#!/bin/bash

JUST_A_SECOND=1

funky()
{
    echo "This is a funky function." 
    echo "Now exting funcky function."
}

fun ()
{
    i=0
    REPEATS=30

    echo
    echo "And now the fun really begins."
    echo

    sleep $JUST_A_SECOND
    while [ $i -lt $REPEATS ]
    do
        echo "-------FUNCTIONS------------>"
        echo "<---------ARE----------------"
        echo "<---------FUN---------------->"
        echo
        let "i+1"
    done
}

funky

fun

exit $?


# 带有参数的函数
#!/bin/bash

DEFAULT=default 

func2(){
    if [ -z "$1" ]
    then 
        echo "-Parameter #1 is zero length.-"
    else
        echo "-Parameter #1 is \"$1\".-"
    fi 

    variable=${1-$DEFAULT}
    echo "variable = $variable"


    if [ "$2" ]
    then
        echo "-Parameter #2 is \"$2\".-"
    fi

    return 0
}

echo 


echo "Nothing passed."
func2
echo

echo "Zero-length parameter passed."
func2 ""
echo

echo "Null parameter passed."
func2 "$uninitialized_param"
echo

echo "Two paramenters passed."
func2 first second 
echo

echo "\"\" \|second\" passed"
func2 "" second 
echo 
 
exit 0

一些关于函数的注意事项

  • 函数定义必须在第一次调用前
  • 函数不能为空
  • 定义多个同名函数,前面的会被覆盖,调用的是最后一个。
  • 函数采用return形式返回的整形参数将保存在¥?中