Untitled
shell脚本
打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行,如果用 php 写 shell 脚本,扩展名就用 php 。#!/bin/bash
echo “Hello World !”#!
是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
echo 命令用于向窗口输出文本。
运行 Shell 脚本有两种方法:
1、作为可执行程序
将上面的代码保存为 test.sh
,并 cd 到相应目录:chmod +x ./test.sh
#使脚本具有执行权限./test.sh
#执行脚本
要用 ./test.sh
告诉系统就在当前目录找。
2、作为解释器参数
直接运行解释器,其参数就是 shell 脚本的文件名/bin/sh test.sh
/bin/php test.php
Shell 变量
变量是用于存储数据值的名称。
your_name=”runoob”
使用变量
在变量名前面加美元符号
your_name=”qinjx”
echo $your_name
echo ${your_name}
加花括号是为了帮助解释器识别变量的边界
只读变量
readonly 命令
删除变量
unset 命令
不能删除只读变量。
变量类型
字符串变量
使用单引号 ‘ 或双引号 “ 来定义字符串
整数变量
使用 declare 或 typeset 命令来声明整数变量
数组变量
允许在一个变量中存储多个值
数组可以是整数索引数组或关联数组
环境变量
这些是由操作系统或用户设置的特殊变量,用于配置 Shell 的行为和影响其执行环境。
特殊变量
有一些特殊变量在 Shell
中具有特殊含义
例如 $0
表示脚本的名称,$1, $2
, 等表示脚本的参数。$#
表示传递给脚本的参数数量,$?
表示上一个命令的退出状态等。
Shell 字符串
单引号
单引号字符串的限制:
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
单引号字符串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
双引号
双引号的优点:
双引号里可以有变量
双引号里可以出现转义字符
拼接字符串
获取字符串长度
提取子字符串
string=”runoob is a great site”
echo ${string:1:4} # 输出 unoo
查找子字符串
string=”runoob is a great site”
echo expr index "$string" io # 输出 4
Shell 传递参数
脚本内获取参数的格式为 $n
,n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数。$0
为执行的文件名(包含文件路径)
Shell 数组
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
数组元素的下标由 0 开始编号。
定义数组
用括号来表示数组,数组元素用”空格”符号分割开。
数组名=(值1 值2 … 值n)
还可以单独定义数组的各个分量:
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
读取数组
${数组名[下标]}
使用 @ 符号可以获取数组中的所有元素:echo ${array_name[@]}
在数组前加一个感叹号 ! 可以获取数组的所有键
获取数组的长度
取得数组元素的个数
length=${#array_name[@]}
或者
length=${#array_name[*]}
取得数组单个元素的长度
length=${#array_name[n]}
关联数组
declare 命令
declare -A array_name -A 选项就是用于声明一个关联数组。 访问关联数组元素可以使用指定的键: array_name["index"]
Shell 基本运算符
Shell echo命令
Shell printf 命令
printf format-string [arguments...]
format-string: 一个格式字符串,它包含普通文本和格式说明符。 arguments: 用于填充格式说明符的参数列表。 格式说明符由 % 字符开始,后跟一个或多个字符,用于指定输出的格式。
Shell test 命令
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
Shell 流程控制
`if
if 语句语法格式:
if condition
then
command1
fi
写成一行(适用于终端命令提示符):
if [ $(ps -ef | grep -c “ssh”) -gt 1 ]; then echo “true”; fi`
`if else
if else 语法格式:
if condition
then
command1
else
command
fi`
if else-if else
if else-if else 语法格式: if condition1 then command1 elif condition2 then command2 else commandN fi if else 的 [...] 判断语句中大于使用 -gt,小于使用 -lt。 if [ "$a" -gt "$b" ]; then ... fi 如果使用 ((...)) 作为判断语句,大于和小于可以直接使用 > 和 <。 if (( a > b )); then ... fi
for 循环
for循环一般格式为: for var in item1 item2 ... itemN do command1 command2 ... commandN done 写成一行: for var in item1 item2 ... itemN; do command1; command2… done;