前言:本文不单单是介绍常用的命令,还融入了bash语法,每个知识点都有浅显的例子配合,让你很容易消化并吸收,最后还有一个boss任务等你挑战,耐心学完的同学肯定会有很大的收获的。大家觉得有用的话,star一下,然后可以随意分享给需要的人,重点是加颗星星哦,加颗星星哦,加颗星星哦。
- bash 跟着敲
展示全部的环境变量,如果你想获取某个特殊的变量,用 echo $变量名
可以改变文件和目录的读、写、执行权限 linux 中的用户、组、文件
非常有用的一个文本处理命令,逐行运行,默认使用空格分割,-F
表示分割的样式
匹配正则表达式的文本行,并输出,-E
正则模糊匹配 -F
精确字母匹配 -w
精确单词匹配
进入目录
创建目录
磁盘使用情况
test是关键字,表示判断;EXPRESSION是被判断的语句。
例子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
例子:提示用户输入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
例子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
例子:从0开始逐步递增,当数值等于5时,停止递增
#!/bin/bash
val=0
while [ "$val" -lt 5 ]
do
echo "val=$val"
((val++))
done
exit 0
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
- 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)
#!/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
选项与参数:
-n: 不要执行 script,仅查询语法的问题;
-v: 再执行 sccript 前,先将 scripts 的内容输出到屏幕上;
-x: 将使用到的 script 内容显示到屏幕上,这是很有用的参数!
例子:想要执行bash脚本,并查看bash的调用流程,可以通过以下命令:
bash -x test.sh
选项与参数:
-n: 输出内容之后,不换行。默认是输入内容之后,换行。
-e: 开启反斜线“\”转义功能
-E: 开启反斜线“\”转义功能(默认)。
例子:输出please input a number:之后不换行
echo -n "please input a number:"
在屏幕上显示出指定的字串
从标准输入设备读入一行,分解成若干字,赋值给bash程序内部定义的变量
别名,alias l='ls -al'
export可以把bash的变量向下带入子bash(即子bash中可以使用父bash的变量),从而让子进程继承父进程中的环境变量。但子bash不能用export把它的变量向上带入父bash。
当bash执行到exec语句时,不会去创建新的子进程,而是转去执行指定的命令,当指定的命令执行完时,该进程(也就是最初的bash)就终止了,所以bash程序中exec后面的语句将不再被执行。
使bash读入指定的bash程序文件并依次执行文件中的所有语句。
退出Shell程序,在exit之后可有选择地指定一个数位作为返回状态。
后语:大家觉得有用的话,star一下,然后可以随意分享给需要的人,重点是加颗星星哦,加颗星星哦,加颗星星哦。