bash-step-to-step

👀 bash命令和语法--带你升级打boss
授权协议 MIT License
开发语言 SHELL
所属分类 应用工具、 终端/远程登录
软件类型 开源软件
地区 不详
投 递 者 戚宏扬
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

bash 跟着敲

前言:本文不单单是介绍常用的命令,还融入了bash语法,每个知识点都有浅显的例子配合,让你很容易消化并吸收,最后还有一个boss任务等你挑战,耐心学完的同学肯定会有很大的收获的。大家觉得有用的话,star一下,然后可以随意分享给需要的人,重点是加颗星星哦,加颗星星哦,加颗星星哦。 【持续更新】

一. 硬件、内核、shell

下面这张摘自鸟哥的图可以很好的说明

二. 命令行

1. 基本操作

export

展示全部的环境变量,如果你想获取某个特殊的变量,用 echo $变量名

whatis

展示用户命令,系统调用、库函数等

whereis

搜索可执行文件、源文件

which

在环境变量中搜索可执行文件,并打印完整路径

clear

清空屏幕

2. 文件操作

cat

在屏幕上显示文本文件

chmod

可以改变文件和目录的读、写、执行权限linux 中的用户、组、文件

cp

复制文件

diff

比较文件,我在上面复制的文件中加了一行diff

find

查找文件,可以通过正则来查

head

查看文件前10行

ls

显示所有文件,-l显示长格式化 -a显示包括隐藏文件

mv

移动文件,同时也可以重命名文件

rm

删除文件,-r删除目录 -f强制删除

touch

创建新文件

3. 文本操作

awk

非常有用的一个文本处理命令,逐行运行,默认使用空格分割,-F表示分割的样式

grep

匹配正则表达式的文本行,并输出,-E正则模糊匹配 -F精确字母匹配 -w精确单词匹配

sed

正则替换

sort

排序

wc

统计文本行数,单词数,字符数

4. 目录操作

cd

进入目录

mkdir

创建目录

pwd

当前目录的路径

5. SSH,系统信息,网络操作

cal

月历

date

当前日期和时间

df

磁盘使用情况

du

文件或目录使用情况

ps

列出你的进程

ssh

远程连接

top

列出当前活动进程

三. 语法

1 条件判断

1.1 test判断语句

test是关键字,表示判断;EXPRESSION是被判断的语句。

echo $? 输出判断结果,0表示成功,其他表示失败。

1.2 []条件判断

中括号的左右扩弧和EXPRESSION之间都必须有空格!

文件类型判断字符串和数字判断

2 if then else语句

例子1:判断文件README.md是不是文件

#!/bin/bash

if [ -f ../README.md ];then
echo 'file exist'
else
echo 'file not exist'
fi

exit 0

例子2:提示用户输入值,如果大于0输出’正数’,小于0输出’负数‘,等于0输出’零‘

#!/bin/bash

# 提示用户输入一个值
echo -n "请输入一个数字:"

# 保存用户输入的值到num中
read num

if [ "$num" -gt 0 ];then
echo '正数'
elif [ "$num" -lt 0 ];then
echo '负数'
else
echo ''
fi

exit 0

3 case语句

例子:提示用户输入Y/y或N/n。若输入Y/y,则输出“我们约起来吧”;若输入N/n,则输出“不约,再见”;否则,“输入有误”

#!/bin/bash

echo -n "你单身吗?(y/n)"

read val

case $val in
Y|y)
echo "我们约起来吧"
;;
N|n)
echo "不约,再见"
;;
*)
echo "输入有误"
;;
esac

exit 0

4 for循环

例子1:输出当前文件夹的一级子目录中文件名字

#!/bin/bash

# 将ls的结果保存到变量CUR_DIR中
CUR_DIR=`ls`

# 显示ls的结果
echo $CUR_DIR

for val in $CUR_DIR
do
if [ -f $val ];then
echo "FILE: $val"
fi
done

exit 0

例子2:输出1-10之间数字的总和

#!/bin/bash

sum=0
for ((i=1;i<10;i++))
do
((sum=$sum+$i))
done

echo "sum=$sum"

exit 0

5 while循环

例子:从0开始逐步递增,当数值等于5时,停止递增

#!/bin/bash

val=0

while [ "$val" -lt 5 ]
do
echo "val=$val"
((val++))
done

exit 0

6 使用break和continue控制循环

break命令允许跳出循环

continue命令类似于 break命令,只有一点重要差别,它不会跳出循环,只是跳过这个循环步。

例子1:[break应用]从0开始逐步递增,当数值等于5时,停止递增。

#!/bin/bash

# 设置起始值为0
val=0

while true
do
if [ "$val" -eq "5" ];then
# 如果val=5,则跳出循环
break;
else
# 输出数值
echo "val=$val"
# 将数值加1
((val++))
fi
done

exit 0

例子2:[continue应用]从0开始逐步递增到10:当数值为5时,将数值递增2;否则,输出数值

#!/bin/bash

# 设置起始值为0
val=0

while [ "$val" -le "10" ]
do
if [ "$val" -eq "5" ];then
# 如果val=5,则将数值加2
((val=$val+2))
continue;
else
# 输出数值
echo "val=$val"
# 将数值加1
((val++))
fi
done

exit 0

四. 数组

1 数组定义

  • array=(10 20 30 40 50)

一对括号表示是数组,数组元素用“空格”符号分割开。引用数组时从序号0开始。

  • 除了上面的定义方式外,也可以单独定义数组:
array[0]=10
array[1]=20
array[2]=30
array[3]=40
array[4]=50
  • var="10 20 30 40 50"; array=($var)

2 数组操作

数组操作

#!/bin/bash

array=(10 20 30 40 50)

# 显示数组中所有元素
echo '显示数组中所有元素'
echo ${array[*]}
echo ${array[@]}

# 显示数组第2项
echo '显示数组第2项'
echo ${array[1]}

# 显示数组长度
echo '显示数组长度'
echo ${#array[@]}

# 输出数组的第1-3项
echo '输出数组的第1-3项'
echo ${array[@]:0:3}

# 将数组中的0替换成1
echo '将数组中的0替换成1'
echo ${array[@]/0/1}

# 删除数组第2项元素  
# 说明:
# unset仅仅只清除array[1]的值,并没有将array[1]删除掉
echo '删除数组第2项元素'
unset array[1]
echo ${array[@]}

exit 0

五.函数

函数实例

#!/bin/bash

# 编辑一个函数foo:打印foo的输入参数的总数,并输入每个参数和参数对应的序号。
function foo()
{
    # 定义局部变量i
    local i=0 
    # 定义局部变量total=传入foo的参数总数
    local total=$#
    # 输出参数总数
    echo "total param =$total"
    # 输出传入foo的每一个参数
    for val in $@
    do
        ((i++))
        echo "$i -- val=$val"
    done

    # 返回参数总数
    return $total
}

foo
foo param1 param2 param3
# 输出foo param1 param2 param3的返回值
echo "return value=$?"

exit 0

六.数值运算

数值元算主要有4种实现方式:(())、let、expr、bc。
工作效率:(()) == let > expr > bc**
(())和let是bash内建命令,执行效率高;而expr和bc是系统命令,会消耗内存,执行效率低。
(())、let和expr只支持整数运算,不支持浮点运算;而bc支持浮点运算。

数值运算实例1:用4中方式实现3*(5+2)

#!/bin/bash

# (())
val1=$((3*(5+2)))
echo "val1=$val1"

# let
let "val2=3*(5+2)"
echo "val2=$val2"

# expr
val3=`expr 3 \* \(5+2\)`
echo "val3=$val3"

# bc
val4=`echo "3*(5+2)"|bc`
echo "val4=$val4"

exit 0

实例3:5/3浮点运算,保留3位小数

#!/bin/bash

# bc 实现5/3浮点运算,保留3位小数
val5=`echo "scale=3; 5/3"|bc`
echo "val5=$val5"

exit 0

七. 字符运算

字符运算

#!/bin/bash

str='hello world'

# 显示字符串
echo '显示字符串'
echo ${str}

# 显示字符串长度
echo '显示字符串长度'
echo ${#str}

# 提取world
echo '提取world'
echo ${str:6}

# 提取or
echo '提取or'
echo ${str:7:2}

# 删除hello
echo '删除hello'
echo ${str#hello}

# 删除world
echo '删除world'
echo ${str%world}

# 将所有的字符l替换为m
echo '将所有的字符l替换为m'
echo ${str//l/m}

exit 0

八. bash调试

bash [-nvx] scripts.sh

选项与参数:
-n: 不要执行 script,仅查询语法的问题;
-v: 再执行 sccript 前,先将 scripts 的内容输出到屏幕上;
-x: 将使用到的 script 内容显示到屏幕上,这是很有用的参数!

例子:想要执行bash脚本,并查看bash的调用流程,可以通过以下命令:

bash -x test.sh

echo [-neE] string

选项与参数:
-n: 输出内容之后,不换行。默认是输入内容之后,换行。
-e: 开启反斜线“\”转义功能
-E: 开启反斜线“\”转义功能(默认)。

例子:输出please input a number:之后不换行

echo -n "please input a number:"

九. bash内建指令

echo

在屏幕上显示出指定的字串

read

从标准输入设备读入一行,分解成若干字,赋值给bash程序内部定义的变量

alias

别名,alias l='ls -al'

export

export可以把bash的变量向下带入子bash(即子bash中可以使用父bash的变量),从而让子进程继承父进程中的环境变量。但子bash不能用export把它的变量向上带入父bash。

exec

当bash执行到exec语句时,不会去创建新的子进程,而是转去执行指定的命令,当指定的命令执行完时,该进程(也就是最初的bash)就终止了,所以bash程序中exec后面的语句将不再被执行。

.

使bash读入指定的bash程序文件并依次执行文件中的所有语句。

exit

退出Shell程序,在exit之后可有选择地指定一个数位作为返回状态。

十. 参考资料

后语:大家觉得有用的话,star一下,然后可以随意分享给需要的人,重点是加颗星星哦,加颗星星哦,加颗星星哦。

十一. 大BOSS

大BOSS

十二. 命令详解

  • basic
  • file
  • text
  • directory
  • sys
  • 4.输入输出 #! /bin/bash # Read users input and then get his name read -p "Please input your first name: " firstName read -p "Please input your last name: " lastName echo -e "Your full name is: $firstNam

  • step into/step out/step over的区别 step into就是单步执行,遇到子函数就进入并且继续单步执行; step over是在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数整个作为一步。 step out就是但单步执行到子函数内时,用step out就可以执行完子函数余下部分,并返回到上一层函数。 step int

  • Linux Step By Step 一 学习Linux Linux应用及其广泛 自从Linux 本人开发出Linux操作系统并决定永远开源,似乎就已经注定Linux的广泛应用。不管是大型机,服务器,桌面机还是嵌入式系统,都有Linux的影子。那其实我为什么如此想系统的学习Linux,其实还有另一些原因。记得 我刚毕业那会,我去一个装的很牛的公司去面试,之所以说他们装的很牛是因为我没有被录取,怀着

  • 3.变量声明 readonly 只读 export 修改或打印环境变量 export -p 显示当前环境 【注】强烈注意,在赋值的前后一定不要有空格. # echo 控制字符颜色 root@kallen:/home/kallen/TEST/Shell# echo -e '\e[1;31mHello,World\e[0m'  Hello,World 背景色: 0 透明(使用终端颜色), 40 黑,

  • shell脚本编程(start、 stop、 restart) #!/bin/sh ##java env export JAVA_HOME=$JAVA_HOME export JRE_HOME=$JAVA_HOME/jre ##service name APP_NAME=user SERVICE_DIR=/home/admin/product/njztc/service/$APP_NAME SER

  • 参考  optimizer.step()和scheduler.step() - 云+社区 - 腾讯云 optimizer.step()和scheduler.step()的区别 optimizer.step()通常用在每个mini-batch之中,而scheduler.step()通常用在epoch里面,但是不绝对,可以根据具体的需求来做。只有用了optimizer.step(),模型才会更新,而s

  • step over(F6) step就是一步一步的意思,over就是执行完这一步的意思。 所以step over就是执行完光标当前所对应的行,即使当前行是一个函数,那么程序不会跳进函数内部,而是直接执行完函数返回,总之就是结束这一行。 step into(F5) into就是进去的意思,所以如果光标所在的行是一个函数调用的语句,step into就会跳进这个函数内部在函数内部单步执行 step r

  • def f(num): print(f"num is: {num}") # step into F11 def g(num): f(num) # <–current breakpoint f(1) # step over F10 def main(): g(2) g(3) # step out of current function scope F12 main()

  • Step Into和Step Over,Step Return有什么区别呢? Step Into(F11/F5) 单步执行,遇到子函数就进入并且继续单步执行; Step Over (F10/F6)在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完在停止,也就是把子函数整个作为一步; Step Return(Shift+F11/F7)在单步执行到子函数内时,用Step

  • step into : 单步执行,遇到子函数就进入并且继续单步执行。 step over: 在单步执行时,在函数内遇到子函数,不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是将子函数整体作为一步。 step out: 如果在调试的时候你进入了一个方法(如f2()),并觉得该方法没有问题,你就可以使用stepout跳出该方法,返回到该方法被调用处的下一行语句。值得注意的是,该方法已执行

 相关资料
  • 这个章节是针对Demo程序做一些更详细的说明,请用户对照Demo的示例程序阅读下面的说明 Prerequisite 到小米生态云查看用户管理页面,可看到所属用户组。点击用户组标签,查看该用户组的用户密钥:一组accessKey和accessSecret 在项目的pom中加入Talos SDK的依赖,坐标如下: <groupId>com.xiaomi.infra.galaxy</groupId

  • 基础常用命令 某个命令 --h,对这个命令进行解释 某个命令 --help,解释这个命令(更详细) man某个命令,文档式解释这个命令(更更详细)(执行该命令后,还可以按/+关键字进行查询结果的搜索) Ctrl + c,结束命令 TAB键,自动补全命令(按一次自动补全,连续按两次,提示所有以输入开头字母的所有命令) 键盘上下键,输入临近的历史命令 history,查看所有的历史命令 Ctrl +

  • 目录 第一讲 对于django望而生畏的人,有兴趣看一看,程序如何从简单到复杂 第二讲 生成一个web form用来做加法的简单例子 第三讲 使用Template的简单例子 第四讲 生成csv格式文件 第五讲 session的示例,开始进入数据库的世界 第六讲 一个wiki的例子 第七讲 一个通讯录的例子 第八讲 为通讯录增加文件导入和导出功能 第九讲 通讯录的美化,使用嵌套模板,静态文件,分页处

  • Xdebug provides an interface for debugger clients that interact with running PHP scripts. This section explains how to set-up PHP and Xdebug to allow this, and introduces a few clients. Introduction X

  • 一步(One Step)是由锤子科技开源的 Android 手机交互应用程序。 什么是一步(One Step)? 通过拖拽完成将信息发送至应用或联系人的动作,节省了在不同应用之间切换的诸多步骤,第一次打通了手持设备中应用间的边界 进一步了解 One Step 写在前面的话 我们开源 One Step 是希望其他厂商能将这一功能集成在系统中,共同改善安卓用户体验、提升操作效率。 我们把 One St

  • 问题内容: Infile1: Infile2: 我如何使用unix join命令加入这些文件以获取以下输出: Dogbanes答案有效,但是…当我在此文件上应用Dogbanes答案时: 和这个: 他们不加入: 第二种情况是制表符分隔的,所以我用 问题答案: 首先两个文件。然后使用联接两个文件的第一个字段。如果要删除空间并转换为,则还需要通过管道传递输出。如下所示: