- 开发无止境 -
Data: 2022-02-28 14:06:24Form: JournalClick: 9
Shell
编程Shell
Shell
脚本Shell
并不是简单的堆砌命令,还可以在 Shell
中编程Shell
虽然没有 C++
、Java
、Python
等强大,但也支持了基本的编程元素 备:Shell 既是一种命令语言,又是一种程序设计语言,直接运行源码即可
Shell
作用Linux
运维工程师 面对的是很多台服务器,总不能把同样的工作重复成很多遍吧# 输出php
echo php
# 输出 php中文网
echo 'php中文网'
# 输出 多行文本
echo "
php中文网
欧阳克
朱老师
"
新建文件:test.sh
#!/bin/bash
echo php # 输出php
echo 'php中文网' # 输出 php中文网
# 输出 多行文本
echo "
php中文网
欧阳克
朱老师
"
# 执行test文件
./test.sh
备:文件要有 执行权限
Shell
变量url=https://www.php.cn
name='php中文网'
teacher="欧阳克"
echo $url
echo ${name}
echo "我是讲师:${teacher}"
建议:给所有变量加上花括号{ },这是个良好的编程习惯
teacher='朱老师'
echo "我是讲师:${teacher}"
readonly
命令可以将变量定义为只读变量,只读变量的值不能被改变readonly teacher
teacher='西门大官人'
echo "我是讲师:${teacher}"
unset
命令可以删除变量unset name
echo ${name}
echo '我是讲师:${teacher}'
echo "我是讲师:${teacher}"
echo "大家好,这里是"$name',网址是:'$url",我是"$teacher
#
获取字符串长度echo ${#url}
编号 | 格式 | 说明 |
---|---|---|
1 | ${string: start :length} | 从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。 |
2 | ${string: start} | 从 string 字符串的左边第 start 个字符开始截取,直到最后。 |
3 | ${string: 0-start :length} | 从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。 |
4 | ${string: 0-start} | 从 string 字符串的右边第 start 个字符开始截取,直到最后。 |
5 | ${string#*chars} | 从 string 字符串第一次出现 _chars 的位置开始,截取 _chars 右边的所有字符。 |
6 | ${string##*chars} | 从 string 字符串最后一次出现 _chars 的位置开始,截取 _chars 右边的所有字符。 |
7 | ${string%*chars} | 从 string 字符串第一次出现 chars_ 的位置开始,截取 _chars 左边的所有字符。 |
8 | ${string%%*chars} | 从 string 字符串最后一次出现 chars_ 的位置开始,截取 _chars 左边的所有字符。 |
url=https://www.php.cn/course/list/33/type/2.html
# 从 url 左边第 2 个字符开始,向右截取 9 个字符
echo ${url: 5: 9}
# 从 url 左边第 5 个字符开始截取,直到最后
echo ${url: 5}
# 从 url 右边第 20 个字符开始,向右截取 10 个字符
echo ${url: 0-20: 10}
# 从 url 右边第 20 个字符开始,直到最后
echo ${url: 0-20}
# 从 url 第一次出现 *. 的位置开始,截取 *. 右边的所有字符
echo ${url#*.}
# 从 url 最后一次出现 *. 的位置开始,截取 *. 右边的所有字符
echo ${url##*.}
# 从 url 第一次出现 .* 的位置开始,截取 .* 左边的所有字符
echo ${url%.*}
# 从 url 最后一次出现 .* 的位置开始,截取 .* 左边的所有字符
echo ${url%%.*}
Shell
并且没有限制数组的大小,理论上可以存放无限量的数据Shell
数组元素的下标也是从 0 开始计数Shell
只支持一维数组,不支持多维数组# 创建数组
nums=(11 33 66 99)
# 创建不同类型值的数组
phpcn=('https://www.php.cn' 'php中文网' '欧阳克' 18)
# 指定下标创建数组
teacher=([1]='朱老师' [3]='西门大官人' [5]='欧阳')
*
和 @
可以获取数组全部数据# 输出数组第一个数据,数组默认下标从0开始
echo ${phpcn[1]}
# 输出下标数组
echo ${teacher[5]}
# 获取全部数据
echo ${nums[*]}
echo ${nums[@]}
# 修改数组的值
teacher[5]='欧阳克'
# 添加数组的值
teacher[2]='猪哥'
echo ${teacher[*]}
unset
删除数组元素# 创建数组
nums=(11 33 66 99)
echo ${nums[*]}
# 删除数组
unset nums[0]
unset nums[1]
unset nums[2]
echo ${nums[*]}
编号 | 运算符 | 说明 |
---|---|---|
1 | + | 加法 |
2 | - | 减法 |
3 | * | 乘法 |
4 | / | 除法 |
5 | % | 取余 |
6 | ++ | 自增 |
7 | -- | 自减 |
原生 bash 不支持简单的数学运算
a=10
b=20
# 会当成普通字符串输出
echo 10+20
echo 10 + 20
echo ${a} + ${b}
编号 | 运算命令 | 说明 |
---|---|---|
1 | (( )) | 用于整数运算,效率很高,推荐使用。 |
2 | bc | Linux 下的一个计算器程序,可以处理整数和小数。Shell 本身只支持整数运算,想计算小数就得使用 bc 这个外部的计算器。 |
3 | let | 用于整数运算,和 (()) 类似。 |
4 | $[] | 用于整数运算,不如 (()) 灵活。 |
5 | expr | 可用于整数运算,也可以处理字符串。比较麻烦,需要注意各种细节,不推荐使用。 |
6 | declare -i | 将变量定义为整数,然后再进行数学运算时就不会被当做字符串了。功能有限,仅支持最基本的数学运算(加减乘除和取余),不支持逻辑运算、自增自减等,所以在实际开发中很少使用。 |