linux全套 | Shell编程 | 16

Shell bash

首先shell是什么?

- 解释器,启动器
-解释器: 
解释器有两种解释的方式
1) 用户交互输入: 就是用户输入一行,机器执行一行
2) 文本文件输入: 就是把要执行的 shell 命令写在一个文件中,然后执行

source 脚本文件
. 脚本文件

如何在文件中定义脚本解释器?

- #!/bin/bash
- #!/usr/bin/python

在 脚本文件 中第一行写上面的语句,就是交代了该脚本文件使用什么解释器执行
否则就需要手动写
source/. 脚本文件
python 脚本文件
注意: 在此之前需要给文件加上可执行权限 chmod +x 脚本文件

shell中也可以定义函数,下面是shell中定义函数的一个简单样式

文本流 & 重定向

重定向

默认是标准的输入输出,现在自己手动指定输入输出的文件
>,>>,>& 重定向输出(1>,2>)
<,<<,<<<重定向输入

1>,1>>: 标准输出重定向
2>,2>>: 错误输出重定向
0<,0<<,0<<<: 标准输出重定向


>/< 完全重写
>>/<< 追加

程序自身都有I/O
0: 标准输入
1: 标准输出
2: 错误输出

&>,>& 
将标准输出和错误输出都重定向到一个文件中
ls -l /god /usr >& ls.out

输出重定向使用

输入重定向使用

变量

shell的变量的作用域如下

- 本地
- 局部
- 位置
- 特殊
- 环境

本地变量

当前shell拥有(其他shell无法使用),生命周期随shell(重启shell后会消失 )

name=god
echo $name

局部变量

只能local用于函数
函数(){
	...
	local val=100
	...
}

位置变量

- $1,$2,${11}
传递的第n个参数

- $#: 位置参数个数
- $*/$@: 参数列表

特殊变量

- $$: 当前shell的pid
- $?: 上一个命令退出的状态
0:成功
other: 失败

环境变量

export 变量名
source 脚本文件

下面是配置python环境变量的例子

cd /etc/profile.d  进入全局环境变量的脚本目录
vim python3.sh  编写环境变量的脚本
=====python3.sh=====
export PYTHON_HOME=/opt/python3.7
export PATH=${PYTHON_HOME}/bin:$PATH
====================
source /etc/profile  更新全局的配置脚本

引用 & 命令替换

引用

单引号' : 弱引用,不会解析变量(不能进行转义)
双引号" : 强引用,会解析变量

注意: 引用输出后会删除引号

命令替换

`` 或 $()
`ls -l /`
$(ls -l /)

注意: 命令替换是可以进行扩展的 $($()....)

退出状态 & 逻辑判断

退出状态

echo $?
- 0 成功退出
- other 退出失败

逻辑判断

- command1 && command2
- command1 || command2

表达式

算术表达式

(1)
a=10
b=20
let c=$a+$b

(2) 
$(()) 
c=$((a+b))

条件表达式

test,[]

- [表达式]
- test 表达式

可以使用 help test 来查看帮助

练习题

- 添加用户
- 用户密码同用户名
- 静默运行脚本
- 避免捕获用户接口
- 程序自定义输出

流程控制

- if
if ...;
then ...;
elif ...;
else ...;
fi

经典格式: if [ 表达式 ] ; then 表达式 ; else 表达式 ; fi
if [3 -gt 8] ; then echo "ok" ; else echo "not ok" ;

- while
while 条件表达式;
do
...
done

- for
步进for:  for (( i=1;i<10;i++ )); do echo $i ; done
增强for: for i in "bj sxt" "sh sxt" "gz sxt"; do echo $i; done

for (());do
...
done

for i in ...;do
...
done


- case

练习题

- 用户给定路径
- 输出文件大小最大的文件
- 递归子目录

练习题

循环按行输入文件内容(要求多种方式)

原文地址:https://www.cnblogs.com/Rowry/p/14442812.html