Shell脚本学习笔记
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
第一个shell脚本
打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用 php 写 shell 脚本,扩展名就用 php 好了。
#!/bin/bash
echo "Hello World !"
ps:
1、文件开头解析必须指定 #!/bin/bash 或 #!/bin/sh,定义脚本的解释器;
2、echo命令用于向窗口输出文本。
运行脚本
chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本
Shell变量
定义变量
your_name="runoob.com" //命名规则与java类似
for file in `ls /etc`
或
for file in $(ls /etc) //给变量赋值
使用变量
your_name="jw"
echo $your_name
echo "I am ${your_name}" //加花括号是为了帮助解释器识别变量边界
只读变量
#!/bin/bash
myUrl="https://www.google.com"
readonly myUrl
myUrl="https://www.runoob.com" //只读变量的值不能改变
删除变量
unset variable_name //不能删除只读变量
变量类型
局部变量
环境变量
shell变量
Shell字符串
字符串可以用单引号,也可以用双引号,也可以不用引号。
单引号
str='this is a string' //任何字符原样输出,变量无效。单个引号无法存在
双引号
your_name='runoob'
str="Hello, I know you are \"$your_name\"! \n"
echo -e $str //双引号中可以存在变量和转义符
拼接字符串
your_name="runoob"
// 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1
// 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2 $greeting_3
获取字符串长度
string="abcd"
echo ${#string} #输出 4
截取字符串
string="runoob is a great site"
echo ${string:1:4} // 输出 unoo 从字符串第 2 个字符开始截取 4 个字符
查找子字符串
string="runoob is a great site"
echo `expr index "$string" io` # 输出 4
Shell 数组
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
定义数组
数组名=(值1 值2 ... 值n)
array_name=(value0 value1 value2 value3) //用空格作为分隔符
或者
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注释
多行注释
#--------------------------------------------
# 这是一个注释
# author:菜鸟教程
# site:www.runoob.com
# slogan:学的不仅是技术,更是梦想!
#--------------------------------------------
##### 用户配置区 开始 #####
#
#
# 这里可以添加脚本描述信息
#
#
##### 用户配置区 结束 #####
或者
:<<EOF
注释内容...
注释内容...
注释内容...
EOF
或者
:<<!
注释内容...
注释内容...
注释内容...
!