bash 跟着敲
前言:本文不单单是介绍常用的命令,还融入了 bash 语法,每个知识点都有浅显的例子配合,让你很容易消化并吸收,最后还有一个 boss 任务等你挑战,耐心学完的同学肯定会有很大的收获的。大家觉得有用的话,star 一下,然后可以随意分享给需要的人,重点是加颗星星哦,加颗星星哦,加颗星星哦。
bash 跟着敲 一。硬件、内核、shell 二。命令行
- 基本操作 export whatis whereis which clear
- 文件操作 cat chmod cp diff find head ls mv rm touch
- 文本操作 awk grep sed sort wc
- 目录操作 cd mkdir pwd
- SSH, 系统信息,网络操作 cal date df du ps ssh top 三。语法 1 条件判断 1.1 test 判断语句 1.2 [] 条件判断 2 if then else 语句 3 case 语句 4 for 循环 5 while 循环 6 使用 break 和 continue 控制循环 四。数组 1 数组定义 2 数组操作 五。函数 六。数值运算 七。字符运算 八. bash 调试 bash [-nvx] scripts.sh echo [-neE] string 九. bash 内建指令 echo read alias export exec . exit 十。参考资料 十一。大 BOSS 一。硬件、内核、shell 下面这张摘自鸟哥的图可以很好的说明
二。命令行
- 基本操作 export 展示全部的环境变量,如果你想获取某个特殊的变量,用 echo $变量名
whatis 展示用户命令,系统调用、库函数等
whereis 搜索可执行文件、源文件
which 在环境变量中搜索可执行文件,并打印完整路径
clear 清空屏幕
- 文件操作 cat 在屏幕上显示文本文件
chmod 可以改变文件和目录的读、写、执行权限 linux 中的用户、组、文件
cp 复制文件
diff 比较文件,我在上面复制的文件中加了一行 diff
find 查找文件,可以通过正则来查
head 查看文件前 10 行
ls 显示所有文件,-l 显示长格式化 -a 显示包括隐藏文件
mv 移动文件,同时也可以重命名文件
rm 删除文件,-r 删除目录 -f 强制删除
touch 创建新文件
- 文本操作 awk 非常有用的一个文本处理命令,逐行运行,默认使用空格分割,-F 表示分割的样式
grep 匹配正则表达式的文本行,并输出,-E 正则模糊匹配 -F 精确字母匹配 -w 精确单词匹配
sed 正则替换
sort 排序
wc 统计文本行数,单词数,字符数
- 目录操作 cd 进入目录
mkdir 创建目录
pwd 当前目录的路径
- 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" -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 val ];then
echo "FILE: $val"
fi
done
exit 0 例子 2:输出 1-10 之间数字的总和
#!/bin/bash
sum=0
for ((i=1;i<10;i++))
do
((sum=i))
done
echo "sum=$sum"
exit 0 5 while 循环 例子:从 0 开始逐步递增,当数值等于 5 时,停止递增
#!/bin/bash
val=0
while [ "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" -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[@]}
显示数组第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=total"
# 输出传入foo的每一个参数
for val in
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=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 之后可有选择地指定一个数位作为返回状态。