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形式返回的整形参数将保存在¥?中