bash命令和语法--带你升级打boss

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之后可有选择地指定一个数位作为返回状态。

十. 参考资料

十一. 大BOSS

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

大BOSS

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2280端口映射到公网,发现经常被暴力破解,自己写了个临时封禁ip功能的脚本,实现5分钟内同一个ip登录密码错误10次就封禁这个ip5分钟,并且进行邮件通知使用步骤openwrt为19.07.03版本,其他版本没有测试过安装bashmsmtpopkg
#!/bin/bashcommand1&command2&wait从Shell脚本并行运行多个程序–杨河老李(kviccn.github.io)
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/phpls-ls 2.编辑修改.bash_profile文件(没有.bash_profile文件的情况下回自动创建)sudovim~/.bash_profile在文件的最后输入以下信息,然后保存退出exportPATH="/Applications/MAMP/bin/php/php7.2.20/b
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如zh_CN之类的语言包,进行中文语言包装:apt-getinstalllanguage-pack-zh-hans3、安装好后我们可以进行临时修改:然后添加中文支持: locale-genzh_CN.UTF-8临时修改> export LC_ALL='zh_CN.utf8'> locale永久
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexadecimalbash2#[0~1]0[0~7]0x[0~f]or0X[0~f]perl0b[0~1]0[0~7]0x[0~f]tcl0b[0~1]0o[0~7]0x[0~f]bashdifferentbaserepresntationreference2.StringlengthLanguageStr
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全命令补全方法:yum-yinstallbash-completionsource/usr/share/bash-completion/bash_completionsource<(kubectlcompletionbash)echo"source<(kubectlcompletionbash)">>~/.bashrc 
参考这里启动jar包shell脚本修改过来的#!/bin/bash#默认应用名称defaultAppName='./gadmin'appName=''if[[$1&&$1!=0]]thenappName=$1elseappName=$defaultAppNamefiecho">>>>>>本次重启的应用:$appName<
#一个数字的行#!/bin/bashwhilereadlinedon=`echo$line|sed's/[^0-9]//g'|wc-L`if[$n-eq1]thenecho$linefidone<1.txt#日志切割归档#!/bin/bashcd/data/logslog=1.logmv_log(){[-f$1]&&mv$1$2
#文件增加内容#!/bin/bashn=0cat1.txt|whilereadlinedon=[$n+1]if[$n-eq5]thenecho$lineecho-e"#Thisisatestfile.\n#Testinsertlineintothisfile."elseecho$linefidone#备份/etc目录#
# su - oraclesu: /usr/bin/ksh: No such file or directory根据报错信息:显示无法找到文件 /usr/bin/ksh果然没有该文件,但是发现存在文件/bin/ksh,于是创建了一个软连接,可以规避问题,可以成功切换到用户下,但无法执行系统自带命令。$. .bash_profile-ksh: .: .b
history显示历史指令记录内容,下达历史纪录中的指令主要的使用方法如果你想禁用history,可以将HISTSIZE设置为0:#exportHISTSIZE=0使用HISTIGNORE忽略历史中的特定命令下面的例子,将忽略pwd、ls、ls-ltr等命令:#exportHISTIGNORE=”pwd:ls:ls-ltr:”使用HIS
一.命令历史  1.history环境变量:    HISTSIZE:输出的命令历史条数,如history的记录数    HISTFILESIZE:~/.bash_history保存的命令历史记录数    HISTFILLE:历史记录的文件路径    HISTCONTROL:     ignorespace:忽略以空格开头的命令
之前在网上看到很多师傅们总结的linux反弹shell的一些方法,为了更熟练的去运用这些技术,于是自己花精力查了很多资料去理解这些命令的含义,将研究的成果记录在这里,所谓的反弹shell,指的是我们在自己的机器上开启监听,然后在被攻击者的机器上发送连接请求去连接我们的机器,将被攻击者的she
BashOne-LinersExplained,PartI:Workingwithfileshttps://catonmat.net/bash-one-liners-explained-part-oneBashOne-LinersExplained,PartII:Workingwithstringshttps://catonmat.net/bash-one-liners-explained-part-twoBashOne-LinersExplained,PartII
Shell中变量的作用域:在当前Shell会话中使用,全局变量。在函数内部使用,局部变量。可以在其他Shell会话中使用,环境变量。局部变量:默认情况下函数内的变量也是全局变量#!/bin/bashfunctionfunc(){a=99}funcecho$a输出>>99为了让全局变量变成局部变量
1、多命令顺序执行;  命令1;命令2  多个命令顺序执行,命令之间没有任何逻辑联系&&  命令1&&命令2  逻辑与,当命令1正确执行,才会执行命令2||  命令1||命令2  逻辑或,当命令1执行不正确,才会执行命令2例如:ls;date;cd/home/lsx;pwd;who ddif=输入文件of=输
原博文使用Linux或者unix系统的同学可能都对#!这个符号并不陌生,但是你真的了解它吗?首先,这个符号(#!)的名称,叫做"Shebang"或者"Sha-bang"。Linux执行文件时发现这个格式,会把!后的内容提取出来拼接在脚本文件或路径之前,当作实际执行的命令。 Shebang这个符号通常在Unix系统的脚本
1、历史命令history[选项][历史命令保存文件]选项:-c:  清空历史命令-w:  把缓存中的历史命令写入历史命令保存文件 ~/.bash_historyvim/etc/profile中的Histsize可改存储历史命令数量历史命令的调用使用上、下箭头调用以前的历史命令使用“!n”重复执行第n条历史
目录1.Shell脚本规范2.Shell脚本执行3.Shell脚本变量3.1环境变量3.1.1自定义环境变量3.1.2显示与取消环境变量3.1.3环境变量初始化与对应文件的生效顺序3.2普通变量3.2.1定义本地变量3.2.2shell调用变量3.2.3grep调用变量3.2.4awk调用变量3.3
   http://www.voidcn.com/blog/wszzdanm/article/p-6145895.html命令功能:显示登录用户的信息命令格式:常用选项:举例:w显示已经登录的用户及正在进行的操作[root@localhost~]#w 11:22:01up4days,21:22, 3users, loadaverage:0.00,0.00,0.00USER