shell编程简述
具体shell命令详见linux系统入门文集 此处仅介绍部分运维操作

shell 既是一个解释器也是一种编程语言
Shell 是一个用C语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言
变量 作用域 声明方式 规范
自定义变量 当前shell = 字符串 整型 浮点型 日期型
环境变量 当前shell和子shell export declare - x
系统环境变量 所有shell
$0 当前shell名称/脚本名称
$# 传入脚本的参数数量
$* 传入脚本的所有参数
$? 上条命令执行的状态码
$PS1 命令提示符
$HOME 用户主文件夹
$PATH 全局命令的搜索路径PATH=$PATH:[新增路径]
echo $HOME
<!--/root-->
echo $PS1
<!--\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$-->
尝试修改原来的样式 例如更偏好蓝色箭头+字体
vim ~/.bashrc
<!--\033[01;34m\] 设置颜色字体-->
修改为 PS1='${debian_chroot:+($debian_chroot)}\033[01;32m\]\u@\h:\033[01;34m\]\w-->'
重定向 fd0 标准输入 fd1 标准输出 fd2 标准错误 >>追加写入
cd test_file
<!--把终端输出结果和标准错误写入list.txt-->
ls -l >> list.txt 2>&1

<!--shell编程里面的函数-->
function 函数名()
{
函数语句
<!--return返回值(可选)-->
return
}
<!--注意:-->
<!--shell自上而下执行,函数必须在使用前定义-->
<!--函数获取变量和shellscript类似,$0代表函数名,后续参数通过$1、$2...获取-->
<!--函数内return仅仅表示函数执行状态,不代表函数执行结果-->
<!--返回结果一般使用echo、printf,在外面使用$()、``获取结果-->
<!--如果没有return,函数状态是上一条命令的执行状态,存储在$?中-->
<!--shell编程中等号两端不要留空格-->
模块化 source 命令
<!--add.sh-->
#!/bin/bash
function add(){
declare -i res_1=$1
declare -i res_2=$2 # 声明是一个整型
res=$(($res_1+$res_2))
echo $res
}
<!--exc.sh-->
#!/bin/bash
source './add.sh'
total=$(add 1 2)
echo $total
<!--转化为可执行文件-->
chmod +x ./exc.sh
./exc.sh

shell 展开
1.大括号展开
# 字符串序列
a{b,c,d}e => abe ace ade
# 表达式序列
{1..5} => 1,2,3,4,5
{1..5..2} => 1,3,5 # 以步长为2展开
{a..e} => a b c d e
2.波浪号展开
命令行字符串的第一个字符为波浪号(~)则执行
~ => $HOME
3.参数展开
<!--间接参数扩展${!parameter},其中引用的参数并不是parameter而是parameter的实际的值-->
parameter="var"
var="shell"
echo ${!parameter} parameter(通过!)-->var(通过${})-->shell
<!--参数长度${#parameter}-->
parameter=cd
echo ${#parameter} # 获得参数的长度 打印2
<!--空参数处理-->
<!--${parameter:-word}#为空替换-->
<!--${parameter:=word}#为空替换,并将值赋给$parameter变量-->
<!--${parameter:?word}#为空报错-->
<!--${parameter:+word}#不为空替换-->
a=1
echo ${a:-word} # 不为空不替换
echo ${b:=word} # b为空 此时把word赋值给b
echo ${b:?word} # b为空 报错
echo ${a:+word} # a不为空 a被替换成word
<!--参数切片${parameter:offset}${parameter:offset:length}-->
<!--参数部分删除-->
<!--${parameter%word}#最小限度从后面截取word-->
<!--${parameter%%word}#最大限度从后面截取word-->
<!--${parameter#word}#最小限度从前面截取word-->
<!--${parameter##word}#最大限度从前面截取word${var}-->
4.命令行替换
# `data`命令用户获得当前时间 `command`完成命令的替换
# Shell 中有两种方式可以完成命令替换,一种是反引号` `,一种是$()
#!/bin/bash
begin_time=`date` #开始时间,使用``替换
sleep 20s #休眠20秒
finish_time=$(date) #结束时间,使用$()替换
echo "Begin time: $begin_time"
echo "Finish time: $finish_time"
5.数字计算
echo $(()) 来包裹数学运算
6.文件名展开
echo 正则匹配