shell编程思维导图
2023-11-20 11:48:08 1 举报
AI智能生成
高效学习shell脚本的编写 shell脚本开发手册
作者其他创作
大纲/内容
简介
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
第一个shell脚本
#!/bin/bash
echo "Hello World !"
echo "Hello World !"
#!
约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
echo 命令用于向窗口输出文本。
Shell 变量
定义变量
your_name="runoob.com"
变量名不加美元符号
使用变量
echo $your_name
echo ${your_name}
变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界
只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
#!/bin/bash
readonly name="zhangsan"
readonly name="zhangsan"
删除变量
使用 unset 命令可以删除变量。
unset variable_name
变量被删除后不能再次使用。unset 命令不能删除只读变量。
Shell 字符串
单引号
str='this is a string'
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用
双引号
your_name='runoob'
str="Hello, I know you are \"$your_name\"! \n"
echo -e $str
双引号里可以有变量
双引号里可以出现转义字符
获取字符串长度
string="abcd"
echo ${#string} #输出 4
提取子字符串
string="runoob is a great site"
echo ${string:1:4} # 输出 unoo
查找子字符串
查找字符 i 或 o 的位置(哪个字母先出现就计算哪个):
string="runoob is a great site"
echo `expr index "$string" io` # 输出 4
echo `expr index "$string" io` # 输出 4
注意: 以上脚本中 ` 是反引号,而不是单引号 '
Shell 注释
Shell 注释
以 # 开头的行就是注释,会被解释器忽略。
多行注释
:<<EOF
注释内容...
注释内容...
注释内容...
EOF
EOF 也可以使用其他符号:
:<<'
注释内容...
注释内容...
注释内容...
'
:<<!
注释内容...
注释内容...
注释内容...
!
Shell 传递参数
可以在执行 Shell 脚本时,向脚本传递参数
$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
$0 为执行的文件名(包含文件路径)
特殊字符用来处理参数
$#
传递到脚本的参数个数
$*
以一个单字符串显示所有向脚本传递的参数。
如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$$
脚本运行的当前进程ID号
$!
后台运行的最后一个进程的ID号
$@
与$*相同,但是使用时加引号,并在引号中返回每个参数。
如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$-
显示Shell使用的当前选项
$?
显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
Shell 数组
定义数组
在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开
数组名=(值1 值2 ... 值n)
array_name=(value0 value1 value2 value3)
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
可以不使用连续的下标,而且下标的范围没有限制。
读取数组
${数组名[下标]}
valuen=${array_name[n]}
使用 @ 或 * 符号可以获取数组中的所有元素
echo ${array_name[@]}
获取数组的长度
取得数组元素的个数
length=${#array_name[@]}
length=${#array_name[*]}
取得数组单个元素的长度
lengthn=${#array_name[n]}
Shell 基本运算符
算数运算符
+
`expr $a + $b`
$[a+b]
关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
-eq
[ $a -eq $b ]
-ne
[ $a -ne $b ]
-gt
[ $a -gt $b ]
-lt
[ $a -lt $b ]
-ge
[ $a -ge $b ]
-le
[ $a -le $b ]
字符串运算符
=
检测两个字符串是否相等,相等返回 true。
[ $a = $b ] 返回 false。
!=
检测两个字符串是否不相等,不相等返回 true。
[ $a != $b ] 返回 true。
-z
检测字符串长度是否为0,为0返回 true。
[ -z $a ] 返回 false。
-n
检测字符串长度是否不为 0,不为 0 返回 true。
[ -n "$a" ] 返回 true。
$
检测字符串是否为空,不为空返回 true。
[ $a ] 返回 true。
假定变量 a 为 "abc",变量 b 为 "efg":
布尔运算符
!
非运算
[ ! false ] 返回 true。
-o
或运算
[ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a
与运算
[ $a -lt 20 -a $b -gt 100 ] 返回 false。
假定变量 a 为 10,变量 b 为 20
逻辑运算符
&&
[[ $a -lt 100 && $b -gt 100 ]] 返回 false
||
[[ $a -lt 100 || $b -gt 100 ]] 返回 true
文件测试运算符
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
val=`expr 2 + 2`
Shell 流程控制
if else
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
then
command1
elif condition2
then
command2
else
commandN
fi
for 循环
for str in This is a string
do
echo $str
done
while 语句
#!/bin/bash
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done
until 循环
until 循环执行一系列命令直至条件为 true 时停止。
until condition
do
command
done
case ... esac
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
Shell 函数
[ function ] funname [()]
{
action;
[return int;]
}
{
action;
[return int;]
}
可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255
函数参数
通过 $n 的形式来获取参数的值
函数返回值在调用该函数后通过 $? 来获得。
收藏
0 条评论
下一页