文章目录
🍎Shell是乜鬼
shell是一个用C语言编写的程序,它是用户使用Linux的桥梁。shell既是一种命令语言,又是一种程序设计语言。
Linux中的shell种类众多:
Bourne Shell (/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell For Root(/sbin/sh)
运行shell脚本的常用方法
- 作为解释器参数:bin/sh filename.sh
- 作为可执行程序:./filename.sh
- 使用命令执行:source filename.sh(文件只需要可读权限,这种方式,只运行文件中的sh指令,在进程中可能看到sh指令的运行,而.sh文件不在运行状态)
🍎Shell变量
🍇定义变量
- 定义变量时不加美元符号($)
- 变量名与等号之间不能存在空格
- 命名只能使用英文字母、数字和下划线,首个字符不能以数字开头
- 中间不能有空格,可以使用下划线(_)
- 不能使用标点符号
- 不能使用bash里关键字
🍇使用变量
使用一个定义好的变量,只要在变量名前面加美元符号($)即可,好习惯就是变量名前都加花括号
your_name="qinjx"
echo $your_name
echo ${your_name}
🍎Shell数组
bash支持一维数组(不支持多维数组),并且没有限定数组的大小
🍇定义数组
在shell中用括号来表示数组,数组元素用空格符号分隔开
array_name=(value0 value1 value2 value3)
或者
array_name=(
value0
value1
value2
value3
) 还
可以单独定义数组的各个分量:
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
可以不使用连续的下标,而且下标的范围没有限制
🍇读取数组
读取数组元素值的一般格式为:${数组名[下标]}
可以使用@读取数组中所有元素
echo ${array_name[@]}
🍎Shell多行注释
:<<'
***
***
'
🍎Shell输入&&输出
🍇输入——read
使用read语句从键盘或文件的某一行文本中读入信息,并将其赋给一个变量
- 如果只指定了一个变量,那么read会把所有的输入付给这个变量,直到遇到第一个文件结束符或回车
- 指定多个变量时,输入用空格作为变量间的分隔符
- 如果输入文本域过长,Shell将所有的超长部分赋予最后一个变量
🍇输出——echo
使用echo命令可以显示文本行或变量,或者把字符串输入到文件
- \c:不换行
- \f:进纸
- \t:跳格
- \n:换行
Linux系统中,选项-n禁止echo命令输出后换行
选项-e才能使转义符生效
如果想把一个字符串输出到文件中,使用重定向符号>。
# >覆盖原有内容
echo "The log files have all been done"> myfile
# >>追加到文件末尾,不覆盖原有内容
echo "The log files have all been done">> myfile
引入引号,必须使用反斜杠\来使shell忽略他的含义
echo "\"/dev/rmt0"\"
输出:"/dev/rmt0"
🍎Shell函数
🍇函数
Shell中函数的定义与其他语言差不多,只是不需要指定类型,格式为
function(){
***
return **
}
函数的使用也跟其他语言一样,定义好函数后,直接使用
function
- 参数返回:可加return语句显示返回想要的返回值,不加则默认最后一行命令的输出作为返回值
🍇参数
调用函数时,可以向其传参数。
#!/bin/bash
test(){
echo "第一个参数为:$1 "
echo "第十个参数为:$10 "
echo "第十个参数为:${10} "
echo "参数总量:$# "
echo "以一个字符串形式输出所有参数:$* "
}
test 1 2 3 4 5 6 7 8 9 11 12
对于参数的详细说明
参数 | 说明 |
---|---|
$# | 传递到脚本或函数的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 |
$- | 显示Shell使用的当前选项,与set命令功能相同。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
🍎总结代码
#!/bin/bash
menu(){
echo "==============="
echo " menu"
echo " 1.add"
echo " 2.sub"
echo " 3.mul"
echo " 4.div"
echo " 0.exit"
echo "==============="
}
add(){
val=`expr $1 + $2`
echo "$1 + $2 = $val"
}
sub(){
val=`expr $1 - $2`
echo "$1 - $2 = $val"
}
mul(){
val=`expr $1 \* $2`
echo "$1 * $2 = $val"
}
div(){
val=`expr $1 / $2`
echo "$1 / $2 = $val"
}
menu
echo -n "Please input a num to choose function: "
read num
case $num in
1) echo "You choose function add"
read -p 'please input num1 : ' a
read -p 'please input num2 : ' b
add $a $b
;;
2) echo "You choose function sub"
read -p 'please input num1 : ' a
read -p 'please input num2 : ' b
sub $a $b
;;
3) echo "You choose function mul"
read -p 'please input num1 : ' a
read -p 'please input num2 : ' b
mul $a $b
;;
4) echo "You choose function div"
read -p 'please input num1 : ' a
read -p 'please input num2 : ' b
div $a $b
;;
0) echo "Exit"
exit 1
;;
esac
实际效果