关于
shell script
是利用shell的功能所写的一个程序,这个程序是使用纯文本文件,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。
shell和shell脚本的区别
Shell
就是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。
Shell既是一种命令语言,又是一种程序设计语言(就是你所说的shell脚本)。作为命令语言,它互动式地解释和执行用户输入的命令;
命令 echo $SHELL
可以查看linux系统的默认解析,当然终端面板上面也显示了
运用
基本使用介绍
- 创建一个.sh(代表shell)为扩展名的文件【扩展名不影响文件的执行,使用js扩展名也行,但是规范扩展名可读性更强】
- 输入代码,第一行一般是
#!/bin/bash
【其中"#!"
是一个约定的标记,告诉系统脚本需要什么解释器来执行,即用哪一种Shell,如果#!
指定指定的解析器不存在 则会使用系统默认的解析器】 - 执行脚本,执行脚本有如下三种形式
bash xxx.sh
执行文件【指明先用bash解析器解析,如果bash不存在才会使用默认解析器】sudo su
获取操作权限,然后在通过. xxx.sh
执行文件【这种方式直接使用默认解析器解析】chmod +x xxx.sh
添加可执行文件,再通过./xxx.sh
执行文件【先按照文件中#!指定的解析器解析,不存在使用默认】
命令行使用
#
# 表示注释当前行,下面是多行注释
:<<EOF
注释内容...
注释内容...
EOF
-
echo hello
echo命令用于向窗口输出文本。
-
定义变量名
- 使用变量名=的方式,通过$去引用变量
- 变量名和等号之间不能有空格、只能使用英文字母,数字和下划线,首个字符不能以数字开头
- 中间不能有空格,可以使用下划线 _,不能有标点符号,不能使用bash里的关键字
- unset 变量名 清楚变量
- readonly 变量名 只读变量,不能修改,只能读取
- 使用变量名=的方式,通过$去引用变量
name = 'yan'
echo $name
unset name # 清楚变量
echo $name
readonly age
age = 19 #报错:test.sh: line 19: age: command not found
echo $age
- 字符串相关操作
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
- 双引号里可以有变量,且可以有转义字符
- 提取字符串${变量:索引1:索引2}
- 获取字符串长度 ${#变量名}
#拼接字符串
name="runoob"
# 使用双引号拼接
greeting="hello, "$name" !"
greeting_1="hello, ${name} !"
echo $greeting $greeting_1 // hello, runoob ! hello, runoob !
# 使用单引号拼接
greeting_2='hello, '$name' !'
greeting_3='hello, ${name} !'
echo $greeting_2 $greeting_3 // hello, runoob ! hello, ${name} !
# 提取字符串
string="Yan、yan_yan"
echo "输出:" ${string:1:4} # 输出: an、y
#获取字符串长度
string="yan"
echo ${#string} #输出 4
- 数组变量
- 定义数组,array_name=(value0 value1 value2 value3),括号包裹数组,变量之间使用空格
- 读取数组变量${数组名[下标]}
- @获取数组的所有元素,echo ${array_name[@]},@替换成*也是一样的
arr=(1 4 'yan' 23)
# echo ${arr[2]} # yan
# echo ${arr} # 1
echo ${arr[@]} # 输出全部数组 1 4 yan 23
echo ${arr[*]} # 同上
- 手动输入赋值变量
- 通过 read 的形式可以读取键盘输入的变量值,但只允许后面跟一个变量,否则会报错
- 加参数 -p 则可以一行显示,更好的读取体验
- 通过$0可以获取执行文件名,$1可以获取第一个输入的参数,$2是第二个输入参数,以此类推
read -p "请输入num值:" num
echo "输入的变量值是:"$num
# 键盘读取多个值
read name age
echo "输入的姓名年龄是:$name $age"
# 获取输入参数
echo $0
echo $2
echo $1
- 其他特殊字符
- 运算符操作
- 使用``反引号,里面的操作数需要用空格隔开,其中expr 是一款表达式计算工具,使用它能完成表达式的求值操作
- 乘号(*)前边必须加反斜杠()才能实现乘法运算;
- if…then…fi 是条件语句
# 运算符
val=`expr 2 + 2`
echo "两数之和为 : $val"
a=10
b=20
val=`expr $a + $b`
echo "两个变量a + b 之和: $val"
val=`expr $a \* $b`
echo "a * b : $val"
if [ $a == $b ]
then
echo "a 等于 b"
fi
if [ $a != $b ]
then
echo "a 不等于 b"
fi
# 上面的判断最后输出:a 不等于 b
常用算术符号
8. 其他
* $表示取结果。和变量名一起使用表示取变量的值,和()一起使用表示取命令群组的执行结果
* 使用关键字data可获取时间
echo $(date) # 2021年11月30日 星期二 16时43分53秒 CST
echo $(date +%Y%m%d-%H%M%S) # 20211130-164353
echo $(ls /) # Applications Library System Users Volumes bin cores dev etc home opt private sbin tmp usr var
参考
https://baike.baidu.com/item/Shell%E8%84%9A%E6%9C%AC