现阶段笔者在学习OS,其中涉及到Bash Shell的使用,于是在这篇博客中记录一下。
目录
开头与注释
所谓Shell脚本,就是一条一条命令组合起来,放到一个文件中,并且可以直接运行这个文件。
#!/bin/bash
#My first Shell Script
echo "Hello World!"
第一行:指定脚本的默认运行程序(即解释器)。在这里指定为bash,一种最常使用的脚本运行程序。
第二行:注释以#开头。
变量
定义变量的方式类似:var_name=value
等号两边不允许有空格,使用$var_name可以获取变量的值。
#!/bin/bash
str="Hello World!"
echo $str
脚本参数
有些命令需要传入参数和选项。Shell脚本中也支持传递参数,参数在Shell脚本中体现为特殊的变量。在执行语句中,参数以空格分隔,每一个参数在脚本中都是一个字符串变量。第一个参数映射到变量名1,第二个参数映射到变量名2,以此类推。
echo自带换行操作,默认情况下,echo关闭了对转义字符的解释。使用参数-e可以打开echo对转义字符的解释功能,echo -e "Hello\nWorld!"可以实现换行输出。
#!/bin/bash
str="Hello $1 and $2"
echo $str
输入如下命令运行
./hello.sh World OS
则会输出Hello World and OS!
需要在双引号中引用变量。
如果将上述的双引号改为单引号,则会原文输出引号内的部分。
此外,除了1、2、3......等这样的变量,还存在特殊变量:$#传递的参数个数,$*一个字符串,内容是以空格为间隔的传递的全部参数。
条件与循环
#!/bin/bash
if (($1 > $2))
then
echo "first > second"
elif (($1 == $2))
then
echo "first == second"
elif (($1 < $2))
then
echo "first < second"
else
echo "emmmmmmm"
fi
其中(())用于比较整数之间的大小。
#!/bin/bash
mkdir files
cd files
i=1
while (($i <= $1))
do
touch "file$i.txt"
let i=i+1
done
函数
函数的定义方式如下:
function func_name(){
#body
return int_value
}
函数可以不返回值,int_value是一个[0,255]之间的整数。
函数的调用方法: func_name param1 param2 param3... paramN
当N>=10时,需要使用${N}来获取参数,否则$只会带第一位数字。
如果函数有返回值,可以在函数调用的后面使用#?来获取返回值。
#!/bin/bash
function fun1(){
echo "Hello World!"
}
function fun2(){
echo "I've got $1 and $2!"
}
function fun3(){
echo "I'm computing first and second!"
return $(($1+$2))
}
fun1
fun2 2 3
fun3 4 5
echo "The sum is $?."
完成脚本之后,需要使用命令chmod +x ./脚本.sh 来使脚本具有运行权限。