今天看到消息,来自大神阮一峰的《bash脚本教程》开源发布了,

我也借此机会来总结个bash极简教程

本文是一个更加简化的《bash极简教程》,告诉你什么时候需要使用bash,最常用的bash语法及关键字使用。

命令能搞定的,不用写bash脚本

在Linux系统里,我们经常会遇到一些操作,不能使用单个命令完成,但是可以使用多个命令组合来完成。如果可以使用命令的组合完成的没有必要写脚本。

命令的组合可以使用;,&&, {} 和 |, 例如:

apt-get update; apt-get upgrade
apt-get update && apt-get upgrade
cat tmp.txt | cut -d ' ' -f 2
mkdir -p aaa/bbb/ccc && touch aaa/bbb/ccc/ddd.txt

以下这些命令经常组合在一起使用,学会了就可以装13了,就可以初步感受到Linux的魅力。

ls, find, xargs, awk,cat, grep,sed, cut, sort, uniq, tr

find . -name '*.pyc' -exec rm -rf {} \;
find dir1 dir2 dir3 dir4 -type d -exec cp header.shtml {} \;
find xargstest/ -name 'file??' | sort | xargs wc -l
cat countryInfo.txt | grep -v "^#" >countryInfo-n.txt
cut -f 3 -d, list.txt | awk '{print $1}' | sort | uniq

终极大招,命令行里使用if/else/for,这个要是用熟了,那你就是大神了,工作会有飞一样的感觉,跟玩差不多。。。

if [ -f "/usr/bin/wine" ]; then export WINEARCH=win32; fi
[ -f "/usr/bin/wine" ] && export WINEARCH=win32
[ -f ~/sample.txt ] && echo “File exists.” || touch ~/sample.txt
ps aux | grep some_proces[s] > /tmp/test.txt ; if [ $? -eq 0 ]; then echo 1; else echo 0; fi
for i in {1..5}; do COMMAND-HERE; done
for i in /etc/*.conf; do cp $i /backup; done
for NUM in `seq 1 1 1000`; do touch $NUM-file.txt; done

为什么需要bash脚本

需要重复执行且逻辑简单。 bash脚本还有个好处就就是跨平台。

bash里常用的条件控制if/else/for:

# 写法一
if test -e /tmp/foo.txt ; then
echo "Found foo.txt"
fi # 写法二
if [ -e /tmp/foo.txt ] ; then
echo "Found foo.txt"
fi # 写法三
if [[ -e /tmp/foo.txt ]] ; then
echo "Found foo.txt"
fi

最常用的判断文件,字符串等。。。

[ -e file ]:如果 file 存在,则为true
[ -s file ]:如果 file 存在且其长度大于零,则为true。
[ string ]:如果string不为空(长度大于0),则判断为真。
[ integer1 -eq integer2 ]:如果integer1等于integer2,则为true。

For循环的使用,使用bash脚本的最主要的理由:

for i in word1 word2 word3; do
echo $i
done for i in *.png; do
ls -l $i
done

如果逻辑太复杂时,需要使用perl或者python

bash脚本虽然支持所有的条件控制,但是很多基本操作总是感觉很别扭,

比如整数,浮点数,字符串的比较,数组的操作,hash的操作,set的操作,正则表达式的匹配等。

所以我一般只有简单的命令和if/else/for才写bash,再复杂的逻辑就使用perl或者python。

参考

阮一峰的《bash脚本教程》: https://wangdoc.com/bash/index.html

开源地址:https://github.com/wangdoc/bash-tutorial

linux的命令和脚本参考,也可以参考小站:http://www.linux6.com/

开源地址:https://github.com/itech001/linux6

bash极简教程的更多相关文章

  1. Typora极简教程

    Typora极简教程 ” Markdown 是一种轻量级标记语言,创始人是约翰·格鲁伯(John Gruber).它允许人们 “使用易读易写的纯文本格式编写文档,然后转换成有效的 HTML 文档.” ...

  2. CentOS安装使用.netcore极简教程(免费提供学习服务器)

    本文目标是指引从未使用过Linux的.Neter,如何在CentOS7上安装.Net Core环境,以及部署.Net Core应用. 仅针对CentOS,其它Linux系统类似,命令环节稍加调整: 需 ...

  3. Asky极简教程:零基础1小时学编程,已更新前8节

    Asky极简架构 开源Asky极简架构.超轻量级.高并发.水平扩展.微服务架构 <Asky极简教程:零基础1小时学编程>开源教程 零基础入门,从零开始全程演示,如何开发一个大型互联网系统, ...

  4. Python 极简教程(八)字符串 str

    由于字符串过于重要,请认真看完并保证所有代码都至少敲过一遍. 对于字符串,前面在数据类型中已经提到过.但是由于字符串类型太过于常用,Python 中提供了非常多的关于字符串的操作.而我们在实际编码过程 ...

  5. Nginx 极简教程(快速入门)

    作者:dunwu github.com/dunwu/nginx-tutorial 推荐阅读(点击即可跳转阅读) 1. SpringBoot内容聚合 2. 面试题内容聚合 3. 设计模式内容聚合 4.  ...

  6. 【转】Typora极简教程

    Typora极简教程 Typora download ” Markdown 是一种轻量级标记语言,创始人是约翰·格鲁伯(John Gruber).它允许人们 “使用易读易写的纯文本格式编写文档,然后转 ...

  7. nginx极简教程

    Nginx 极简教程 本项目是一个 Nginx 极简教程,目的在于帮助新手快速入门 Nginx. examples 目录中的示例模拟了工作中的一些常用实战场景,并且都可以通过脚本一键式启动,让您可以快 ...

  8. NodeJS 极简教程 <1> NodeJS 特点 & 使用场景

    NodeJS 极简教程 <1> NodeJS 特点 & 使用场景 田浩 因为看开了所以才去较劲儿.   1. NodeJS是什么 1.1 Node.js is a JavaScri ...

  9. 自制 os 极简教程1:写一个操作系统有多难

    为什么叫极简教程呢?听我慢慢说 不知道正在阅读本文的你,是否是因为想自己动手写一个操作系统.我觉得可能每个程序员都有个操作系统梦,或许是想亲自动手写出来一个,或许是想彻底吃透操作系统的知识.不论是为了 ...

  10. python极简教程04:进程和线程

    测试奇谭,BUG不见. 大家好,我是谭叔. 这一场,主讲python的进程和线程. 目的:掌握初学必须的进程和线程知识. 进程和线程的区别和联系 终于开始加深难度,来到进程和线程的知识点~ 单就这两个 ...

随机推荐

  1. 【事件分析】20250112-Usual 赎回机制调整事件

    背景信息 https://docs.usual.money/ Usual 是一个聚合 RWA 的稳定币发行协议,经济模型中存在三种代币: USD0:Usual 发行的稳定币. USD0++:USD0+ ...

  2. linux服务器通过rpm包安装nginx案例

    [rpm安装nginx] 普通用户执行安装命令:sudo rpm -ivh nginx-1.19.5-1.el7.ngx.x86_64.rpm 安装过程很简单,如下: 显示信息 nginx-1:1.1 ...

  3. 联想服务器安装Centos8.3

    准备 1.服务器型号:ThinkSystem SR158 2.安装系统:Centos8.3 3.刻镜像工具:rufus 启动盘制作 我这里选择的是rufus,没有用UltraISO,因为制作的镜像经常 ...

  4. C#中的内部函数(子函数)

    private bool GetMedicalAdvice(string zyID, out DataTable dtM, out DataTable dtD) { bool result = fal ...

  5. Frp内网穿透(一)

    ftp简介 frp frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https协议. 利用处于内网或防火墙后的机器,对外网环境提供 http 或 https ...

  6. IDEA Spring Boot项目,排查解决maven包冲突

    一.Idea安装插件 下载方式1:插件名称:maven helper 打开Idea设置,搜索安装该插件 下载方式2:https://plugins.jetbrains.com/plugin/7179- ...

  7. Luogu P1983 车站分级 题解 [ 绿 ] [ 拓扑排序 ] [ 图论建模 ] [ 虚点 ]

    车站分级:很好的拓扑排序题,细节有点多. 图论建模 首先观察对于一条线路,我们可以从中直接得到什么信息: 假设这条线路的开头为 \(st\),结尾为 \(ed\),那么在 \([st,ed]\) 的车 ...

  8. 德承GP-3100 x DeepSeek:边缘运算工控机在Windows系统下私有化部署DeepSeek-R1 AI模型教程

    2025年春节前夕,中国人工智能企业深度求索(DeepSeek)发布其开源AI模型DeepSeek-R1,性能对标OpenAI开发的GPT-o1正式版,一时之间各类相关的话题引爆国内外.除了可以在手机 ...

  9. Docker容器访问挂载文件权限问题

    问题描述 在使用docker-compose部署项目时,yaml文件如下: version: '3' services: purchasing-contract-consumer: image: my ...

  10. [QOJ8672][PKUSC2024] 排队

    函数复合,直接转化为离线问题,那我们就需要完成对满足条件的量的区间加操作. 显然 \(ans_{[l,r]}\ge ans_{(l,r]}\),所以可以线段树二分. 时间复杂度 \(O(q\log n ...