linux基础之Shell脚本
linux基础之Shell脚本
什么是shell
- shell充当计算机软件与硬件之间的翻译官
执行
- bash 文件名
- ./文件名
- ./需要用户有对文件的执行权限
输出
- echo 字符串/'字符串'/"字符串" 都可正常执行
shell变量
- 声明变量的方式
- 变量名=变量值
- 变量名和变量值之间的等号两边不能有空格
- 如果变量值中有空格,需要将变量值使用引号引起
- 读取变量方式
- ${变量名}
- 读取的变量需要其他命令一起使用,$单独出现不算命令,它只是读取的方式
- 取消变量
- unset变量名
- linux的变量可以用此方法取消变量
数组
- 数组创建
- 数组名=(arg1 arg2 ...)
- 数组读取
- ${数组名[下标/获取所有使用*]}
- 如果没有指定下标,则默认输出0的位置
- 下标从0开始
- 获取数组长度
- 获取数组长度可以用${#数组名[*]}
- 更改数组内容
- 数组名[位置]=新数值
从控制台读取数据
- read [选项] 变量名
- p "提示信息" --提示信息
- t time[单位秒] -- 超时自动退出
查看历史命令
- history
- 默认记录一千条,可以修改
- !行数 -- 直接执行历史上指定行的命令
- !n会自动执行选择的命令,不能修改
通配符
- * -- 0-N个任意字符
- ? -- 一个任意字符
- [满足条件{a-z/abcd...}]/[^取反] -- 指定范围/固定字符中匹配一个字符
管道符
- ;
- 语句之间的分隔符
- 分号两侧的语句按顺序执行
- 如果分号左侧的命令出现错误,不影响右侧的执行
- &&
- 第一个语句正确,判断后面语句
- 第一个语句错误,后面不进行判断
- ||
- 如果一个语句正确,不判断后面的语句
- 如果第一个语句错误,判断后面的语句
- |
- 左侧语句的输出是右侧语句的输入
输出重定向
- 把正常输出
- echo 文件名A [1正确/2错误] > 文件名B 覆盖
- echo 文件名A [1正确/2错误] >> 文件名B 追加
- 正确和错误写入到同一个文件
- echo 文件名A >> 文件名B 2>&1
- echo 文件名A &>> 文件名B
- 正确和错误分别写入到不同文件
- echo 文件名A >> 文件名B >> 文件名C
shell script
- shell脚本
- 利用shell的命令所写的一个可以执行的"程序",这个程序是纯文本文件,把一些业务操作使用控制语句连接起来,有了一定的逻辑关系,也可以搭配一些shell的语法或重定向,达到我们所要实现的目的
- 优点是实现功能的自动化操作
- shell脚本语法
- 第一行:#!/bin/bash
- 第二行起,正常业务逻辑
- 脚本内数字运算
- $((${num}+100))
- ${let "${num}+=100"}
- -eq --相等
- -ne --不等
- -gt --大于
- -ge --大于等于
- -lt --小于
- -le --小于等于
- 关于字符串的判断
- == --等于
- != --不等于
- 控制语句
- 判断--if...else
- if [判断式] 逻辑连接符 [判断式] ; then 执行语句
- elif [判断式] 逻辑连接符 [判断式] ; then 执行语句
- else 执行语句
- fi
number=10 number2=20 if [ ${number} -lt ${number2} ] then echo "<" elif [ ${number} -gt ${number2} ] then echo ">" elif [ ${number} -eq ${number2} ] then echo "=" elif [ ${number} -le ${number2} ] then echo "<=" elif [ ${number} -ge ${number2} ] then echo ">=" then [ ${number} -ne #{number2} ] then echo "!=" else echo "error" fi
- 判断--case
- case $ 变量名 in
匹配的内容) 执行语句
;;
匹配的内容) 执行语句
;;
匹配的内容) 执行语句
;;
...* - esac 执行语句
case ${number} in
10)
echo "10"
;;
20)
echo "20"
;;
esac
echo "其他"
- 循环
- while循环
- 满足条件时循环
- while [ 执行条件 ]
do
循环体
done
while [ 条件 ]
do
echo "循环体"
done
- until循环
- 满足条件时终止
- until [ 执行条件 ]
do
循环体
done
until [ 条件 ]
do
echo "循环体"
done
- for循环
- for固定循环
- for 临时变量 in 1 2 3 4 5...
do
循环体
done
for i in [ 指定循环 ]
do
echo "循环体"
done
- 不固定循环
- for ((i=0;i<=10;i++))
do
循环体
done
for((i = 1 ;i<10;i++)) do echo "循环体" done
- 函数
- 把一些公共的代码封装成一个函数,使用的时候调用
- 定义一个函数 function 函数名(){函数体}
- 调用函数时没有括号,用空格分割传参
- 函数创建时没有形参,获取参数的时候,$number--number代表第几个参数
- $#代表参数的个数
- 如果函数有返回值,使用echo返回
- 参数的个数可以无限个,根据实际情况使用
- 通过 变量名=$(函数名 参数 参数...)来获得返回值
function eat() {
echo "I eat '$1' today"
}
#调用
eat "apple"