shell用法总结
2021-05-08 本文已影响0人
celusing
一.常用shell指令
- set -e
set -e
exit 0
脚本在文件开头加上set -e,这句语句告诉bash如果任何语句的执行结果不是true,则应该退出。
二.shell变量
1.shell变量基本用法
1.定义变量
#等号两边不加空格
your_name="runoob.com"
2.使用变量
#{}不引起歧义的情况下,加不加都可以。
echo ${your_name} or $your_name
3.只读变量
#myUrl不能再重新赋值。否则会报错。
myUrl="https://www.google.com"
readonly myUrl
4.删除变量
#unset不能删除readonly变量
unset ariable_name
2.变量类型
- 局部变量:在脚本或命令中定义,只在当前shell实例中有用,其他shell不能访问局部变量
- 环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。(export 的环境变量)
- shell变量:shell变量是由shell程序设置的特殊变量
3.shell字符串
shell字符串可以是单引号,也可以是双引号。但是单引号的限制:
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用
双引号优点:
- 双引号里可以有变量
- 双引号里可以出现转义字符
1.获取字符串长度
string="abcd"
echo ${#string}
2.提取子字符串
string="runoob is a great site"
echo ${string:1:4} # 输出 unoo
4.shell数组
bash支持一维数组(不支持多维),并且没有长度限制
1.定义数组
数组名=(值1 值2 ... 值n)
array_name=(value0 value1 value2 value3)
2.读取数组
${数组名[下标]}
valuen=${array_name[n]}
#使用@读取数组的所有原属
echo ${array_name[@]}
3.读取数组的长度
length=${#array_name[@]} or length=${#array_name[*]}
#读取数组中某个元素的长度
lengthn=${#array_name[n]}
5.shell注释
- 单行注释:#
- 多行注释::<<EOF ... EOF
三.shell传递参数
1.传递参数“$n”的方式
$0:脚本名称
-
特殊字符
image.png
四.shell运算符
- 算术运算符
- 关系运算符
- 布尔运算符
- 字符串运算符
- 文件测试运算符
原生的shell不支持简单的算数运算符,但可以通过其他命令实现:awk和expr,expr最常用
#1.要用``反引号包围
#2.表达式和运算符之间要有空格,必须2 + 2,不能写成2+2
val=`expr 2 + 2`
echo "两数之和为 : $val"
1.算数运算符
image.png注意:
条件表达式要放在方括号之间,并且要有空格。必须:[ b ]
2.关系运算符
关系运算符只支持数字,不支持字符串,除非字符串是数字。
image.png
3.布尔运算符
image.png4.逻辑运算符
image.png5.字符串运算符
image.png6.文件检测运算符
image.png五.echo 语句
echo语句用于字符串的输出
1.普通字符串输出
echo "It is a test"
2.显示转义字符
echo "\"It is a test\""
3.显示变量
read name
echo "$name It is a test"
4.显示换行
echo -e "OK! \n" # -e 开启转义
echo "It is a test"
5.显示不换行
echo -e "OK! \c" # -e 开启转义 \c 不换行
echo "It is a test"
6.显示结果定向到文件
echo "It is a test" > myfile
7.显示命令结果
echo `date`
六.流程控制
shell里面,流程控制不能为空,即:如果没有else,就不要写else
1.if
if condition
then
command1
command2
...
commandN
fi
2.if/else
if condition
then
command1
command2
...
commandN
else
command
fi
3.if elseif else
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
4.for循环
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
5.while语句
while condition
do
command
done
6.until循环
until condition
do
command
done
7.case ... esac
#;;表示break
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
8.跳出循环
8.1break
while :
do
echo -n "输入 1 到 5 之间的数字:"
read aNum
case $aNum in
1|2|3|4|5) echo "你输入的数字为 $aNum!"
;;
*) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"
break
;;
esac
done
8.2continue
while :
do
echo -n "输入 1 到 5 之间的数字: "
read aNum
case $aNum in
1|2|3|4|5) echo "你输入的数字为 $aNum!"
;;
*) echo "你输入的数字不是 1 到 5 之间的!"
continue
echo "游戏结束"
;;
esac
done
七.shell函数
函数必须先定义,后使用
[ function ] funname [()]
{
action;
[return int;]
}
备注:
1. [ function ]:关键字可选,可以不带,直接定义func()
2. 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255
1.返回值:
函数返回值在调用该函数后通过 $? 来获得。
2.函数入参:
funWithParam(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "第十个参数为 $10 !"
echo "第十个参数为 ${10} !"
echo "第十一个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
八.文件包含
和其他语言一样,shell也可以包含其他文件。这样可以很方便的封装一些公用的代码作为一个独立的文件。
包含其他文件语句:
. filename # 注意点号(.)和文件名中间有一空格
或
source filename