Linux bash脚本编程
linux脚本编程通常用于控制操作系统,操作文件系统,进行简单的数字运算等。和Python,c语言不同的是,通常不用于复杂的逻辑和算数运算。
应用场景:大量使用bash命令对文件系统进行操作,控制操作系统
简述
bash脚本编程具体总结有以下几个方面
- 变量操作
- 文件操作
- 权限操作
- 文本操作
- vim编辑器
- bash脚本编写格式
- 条件判断
- 循环语句
- 常用命令和快捷键
1.变量操作
bash为解释性语言,弱类型语言,具体设置变量有以下特点
- 不强制区分变量类型,无论存储什么类型的数据,默认均存储为ascii
- 不需要事先声明
set 定义变量
set Var_NAME = Value
set可以省略
unset撤销变量
unset Var_NAME
使用变量
-
方法一
NAME="Open Stack" echo $NAME unset NAME
-
方法二
echo "There are some ${animal}s."
注意:
必须为双引号,单引号不会将转义${animal}
如果变量中间有空格,则必须用花括号,否则花括号可以省略
变量类型
本地变量:NAME="Open Stack"
,只对当前shell进程有效,对子shell和其他shell无效
局部变量:local VAR_NAME=Value
只对代码段有效,仅对局部代码有效,不包括当前shell
环境变量:export VAR_NAME
,对当前shell及其子shell有效,例如:export LANG=en
位置变量:$1,$2,...
特殊变量:$$,$!,$#,$?
声明变量declare
bash也可以用declare声明变量
declara [option] var_name
option:
- -i 整形变量
- -x 环境环境变量
- -a 声明一个数组
显示当前系统所有环境变量的命令:
- printenv
- export
查看所有变量命令:
- set
使用变量
变量引用 :${VAR_NAME}
双引号:弱引用,可以进行变量替换
单引号:强引用,不可以进行变量替换,显示字符串本身
反引号:命令引用,``,$(),显示命令执行的结果
echo "My name is $NAME"
echo "The time is `data +%T`"
echo "The time is $(data +%T)"
例如:创建以当前日期为文件名的文件
touch file-`data +%F`.txt
touch file-$(data +%F).txt
2. 文件操作
文件夹操作
按列表显示文件详细信息
ls -al /tmp 显示/tmp下面所有文件的详细信息
创建文件夹
mkdir test1
mkdir -p test1/test2 递归创建文件
删除文件夹
rmdir test1 只能删除空文件夹
rmdir -p test1/test2 只能删除空文件夹
rm -rf test111 强制删除文件或文件夹中所有内容
移动文件或文件夹
mv test1 /tmp
mv test1 test2 test3 /tmp 将前面文件全部移动到/tmp目录下
给文件或文件夹改名
mv test1 test111
拷贝文件或文件夹
cp test1 /tmp 只能拷贝单个文件或空文件夹
cp test1 test2 test3 /tmp 将前面文件全部拷贝到/tmp目录下
cp -r test111 /tmp 递归拷贝,将文件夹中所有文件全部拷贝到/tmp目录下
文件操作
文件其他操作同上述文件夹一样
创建文件
touch 1.txt 创建一个空文件
touch 1.txt 2.txt 3.txt 创建3个空文件
修改文件内容
vim 1.txt 使用vim编辑器编辑1.txt
删除文件
rm 1.txt
3.权限管理
chmod +x demo.py 给demo.py一个执行权限
chmod o-w 1.txt 取消其他人对1.txt写权限
chown user1:grp1 test1 修改test1的属主为user1,属组为grp
详细内容见下面博客
linux中修改文件或文件夹权限的命令
4.文本操作
grep过滤命令
grep通常配合管道使用
例如:
ls -al | grep test 查找当前路径下文件名包含test字样的文件
grep "sbin/nologin$" /etc/passwd 查找/etc/passwd文件中以sbin/nologin结尾的文件
正则表达式使用
通常我们在查找,搜索,过滤方面使用正则表达式,正则表达式需要配合相关命令使用,bash中正则表达式和一般编程使用的正则表达式稍有不同
^string 锚定行首符合条件的内容
string$ 锚定行尾符合条件的行
.:匹配任意单个字符
*:匹配紧挨着其前面的任意次
[]:匹配指定范围内的任意单个字符
\?:匹配紧挨在其前面的字符0次或1次 写法 a\?b
\{m,n\}:匹配其前面的字符至少m次,至多n次
匹配至多3次 \{0,3\}
匹配至少3次 \{3,\}
匹配3次 \{3\}
\<: 锚定词首
\>: 锚定词尾
\<pattern\>:锚定词首
\bpattern\b:锚定词尾
\(\): 分组 \(pattern\)
\(ab\)\{1,3\}: 可以匹配多个ab组合
\(a.b\).*\1 : 可以引用,\1引用第一个括号内容,\2引用第二个括号内容
扩展正则表达式 需要grep -e 或者egrep命令
+:匹配其前面的字符至少1次
?:匹配其前面的字符0次或1次
{m,n}:至少m次,至多n次
(): 分组,支持引用\1,\2
a|b: 匹配a或者匹配b
词首词尾锚定,必须要\转义
\<: 锚定词首
\>: 锚定词尾
^: 匹配开头
$: 匹配结尾
详细内容见下面博客
linux中grep命令以及正则的使用
5.vim编辑器使用
linux中最常见的文本编辑器,通常我们用他来编写文本程序或者编写代码
打开vim vim 1.txt
编写内容 输入i进入输入模式
保存并退出 输入模式按ESC,然后输入:qw
详细内容见下面博客
Vim命令总结
6. bash脚本编写格式
通常以.sh为后缀,脚本文件第一行需要声明sh的位置
#!/bin/bash
echo hello world
打印hello world
7. 条件判断
if条件判断
if 条件1; then
语句1
语句2
elif 条件2; then
语句1
语句2
else
语句1
语句2
fi
详细内容见下面博客
bash if条件判断
case条件判断
case 变量 in
条件1)
语句1
语句2;;
条件2)
语句1
语句2;;
*)
语句1
语句2;;
esca
详细内容见下面博客
bash case用法
8. 循环语句
for循环
示例1
for VAR_NAME in 元素1 元素2 ...
do
语句1
语句2
....
done
示例2
for ((i=0;i <=100;i++));do
let sum+=i
done
详细内容见下面博客
bash for循环
while和until循环
while循环格式如下
while 测试条件;do
语句1
语句2
...
done
until循环格式如下
until 测试条件; do
语句1
语句2
....
done
详细内容见下面博客
bash while循环和until循环
9. 常用命令和快捷键
ctrl + l 清屏
ctrl + c 取消或终止
tab 命令补齐,路径补齐
详细内容见下面博客
Linux常用命令和快捷键
用户和组相关命令
linux用户和组相关的命令
未完待续...