shell编程思维导图
2023-11-20 11:48:08 1 举报
AI智能生成
高效学习shell脚本的编写 shell脚本开发手册
作者其他创作
大纲/内容
简介
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
第一个shell脚本
#!/bin/bash<br>echo "Hello World !"
#!
约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
echo 命令用于向窗口输出文本。
Shell 变量
定义变量
your_name="runoob.com"
变量名不加美元符号
使用变量
echo $your_name
echo ${your_name}
变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界
只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
#!/bin/bash<br>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
查找子字符串<br>
查找字符 i 或 o 的位置(哪个字母先出现就计算哪个):
string="runoob is a great site"<br>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<br>then<br> command1<br>elif condition2 <br>then <br> command2<br>else<br> commandN<br>fi<br>
for 循环
for str in This is a string
do
echo $str
done
while 语句
#!/bin/bash<br>int=1<br>while(( $int<=5 ))<br>do<br> echo $int<br> let "int++"<br>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 [()]<br>{<br> action;<br>[return int;]<br>}
可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255
函数参数
通过 $n 的形式来获取参数的值
函数返回值在调用该函数后通过 $? 来获得。
收藏
0 条评论
下一页