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,...特殊变量:2,... 特殊变量:2,...特殊变量:,,,!,KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲,?
声明变量declare
bash也可以用declare声明变量
declara [option] var_name
option:
- -i 整形变量
- -x 环境环境变量
- -a 声明一个数组
显示当前系统所有环境变量的命令:
查看所有变量命令:
使用变量
变量引用 :${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\}
\<: 锚定词首
\>: 锚定词尾
\:锚定词首
\bpattern\b:锚定词尾
\(\): 分组 \(pattern\) \(ab\)\{1,3\}: 可以匹配多个ab组合\(a.b\).*\1 : 可以引用&#xff0c;\1引用第一个括号内容&#xff0c;\2引用第二个括号内容扩展正则表达式 需要grep -e 或者egrep命令&#43;:匹配其前面的字符至少1次?:匹配其前面的字符0次或1次{m,n}:至少m次&#xff0c;至多n次(): 分组&#xff0c;支持引用\1,\2a|b: 匹配a或者匹配b 词首词尾锚定&#xff0c;必须要\转义\<: 锚定词首\>: 锚定词尾^: 匹配开头$: 匹配结尾
详细内容见下面博客
linux中grep命令以及正则的使用
5.vim编辑器使用
linux中最常见的文本编辑器&#xff0c;通常我们用他来编写文本程序或者编写代码
打开vim vim 1.txt
编写内容 输入i进入输入模式
保存并退出 输入模式按ESC&#xff0c;然后输入:qw
详细内容见下面博客
Vim命令总结
6. bash脚本编写格式
通常以.sh为后缀&#xff0c;脚本文件第一行需要声明sh的位置
#!/bin/bashecho 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&#61;0;i <&#61;100;i&#43;&#43;));dolet sum&#43;&#61;i
done
详细内容见下面博客
bash for循环
while和until循环
while循环格式如下
while 测试条件;do语句1语句2...
done
until循环格式如下
until 测试条件; do语句1语句2....
done
详细内容见下面博客
bash while循环和until循环
9. 常用命令和快捷键
ctrl &#43; l 清屏
ctrl &#43; c 取消或终止
tab 命令补齐&#xff0c;路径补齐
详细内容见下面博客
Linux常用命令和快捷键
用户和组相关命令
linux用户和组相关的命令
未完待续…