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执行文件【先按照文件中#!指定的解析器解析,不存在使用默认】
- # # 表示注释当前行,下面是多行注释
:<
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



