shell基础学习

查看shell解释器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ieZRfUSg-1677309668830)(../images/Pasted%20image%2020230225100639.png)]

查看系统默认shell解释器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iZRGiMiG-1677309668831)(../images/Pasted%20image%2020230225104422.png)]

垃圾火狐:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-19Ecqc52-1677309668831)(../images/Pasted%20image%2020230225100723.png)]

写hello world

#!/bin/bash (指定shell解析器)

#注释
echo "hello world"

执行:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i8SK6sMU-1677309668831)(../images/Pasted%20image%2020230225104746.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1EGPo9Zf-1677309668832)(../images/Pasted%20image%2020230225104833.png)]

多命令处理执行

#!/bin/bash
cd /root/leanshell/
touch banzhang.txt
echo "i love cls" >> banzhang.txt

变量

变量名称可以是字母,数字下划线,不能以数字开头
在bash中变量默认是字符串类型,不能直接进行数值运算.

变量的值有空格,需要使用双引号或者单引号括起来.

显示当前shell所有变量

常用系统变量

$HOME $PWD $SHELL $USER

自定义变量

变量名=值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YMaL3GFi-1677309668832)(../images/Pasted%20image%2020230225105641.png)]

等号两边没有空格

撤销变量

unset 变量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aFHHi9KX-1677309668832)(../images/Pasted%20image%2020230225105915.png)]

静态变量

readonly 变量
静态变量是不能unset的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uZmAhX2C-1677309668832)(../images/Pasted%20image%2020230225110021.png)]

变量提升为全局环境变量

这样变量就可以提供给其他的shell程序使用了
export 变量名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y5Ohc3J0-1677309668833)(../images/Pasted%20image%2020230225112518.png)]

特殊变量

$n

$n : n 是数字, $0 表示该脚本的名称, $1-9代表第一到第九个参数(命令行参数). 十以上的参数可以这样表示: ${10}

#!/bin/bash
echo $0 $1 $2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W7qgugLL-1677309668833)(../images/Pasted%20image%2020230225113843.png)]

$#

获取所有输入参数的个数,常用来循环

#!/bin/bash
echo $0 $1 $2
echo $#

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e4Z8wQvv-1677309668833)(../images/Pasted%20image%2020230225114010.png)]

$* $@

$* :变量代表命令行中所有的参数, $*把所有的参数看成一个整体.

$@ : 代表命令行中的所有参数, $@把每一个参数区分对待.

#!/bin/bash
echo $0 $1 $2
echo $#

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l25Cgs8Q-1677309668833)(../images/Pasted%20image%2020230225114315.png)]

$?

最后一次执行命令的返回状态. 如果这个变量是0 ,证明上一个命令执行正确; 如果变量的值非零, (具体哪一个数,由命令自己来决定),则证明上一个命令执行不正确.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KgQHn0ja-1677309668834)(../images/Pasted%20image%2020230225114551.png)]

运算符:

  • $((运算式))$[运算式]
  • expr +,-,*,/,%
    注意:expr运算符前后有个空格
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0ejNnwH7-1677309668834)(../images/Pasted%20image%2020230225122846.png)]

表示2+3*4
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FDJbcgNc-1677309668834)(../images/Pasted%20image%2020230225123928.png)]

条件判断

[ condition ] 
# condition前后有空格

比较

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UrwN7P89-1677309668834)(../images/Pasted%20image%2020230225124226.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1NMqJ4LL-1677309668835)(../images/Pasted%20image%2020230225124348.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zO1ggTsF-1677309668835)(../images/Pasted%20image%2020230225124456.png)]

流程控制语句

if

if [ 条件判断式 ];then
	程序
fi
或者
if [ 条件判断式 ]
	then
		程序
fi

if [ 条件判断式 ]条件判断表达式前后有空格, if之后有空格

#!/bin/bash
if [ $1 -eq 1 ]
        then
                echo "simple 1 "
elif [ $1 -eq 2 ]
        then
                echo "simple 2 "
fi

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l7RnidYk-1677309668835)(../images/Pasted%20image%2020230225130026.png)]

case

case $变量名 in
	"值1")
	如果变量的值等于值1,则执行程序1
	;;
	"值2")
	如果变量的值等于值2,则执行程序2
	;;
	…省略其他分支…
	*)
	如果变量的值都不是以上的值,则执行此程序
	;;
esac

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vDmUkrUy-1677309668835)(../images/Pasted%20image%2020230225142752.png)]

#!/bin/bash
case $1 in
 1)
        echo "simple1"
;;
 2)
        echo "simple2"
;;
 *)
        echo "none"
;;
esac

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bkRSF5qW-1677309668836)(../images/Pasted%20image%2020230225143032.png)]

for 循环

语法一:
for 变量 in 值1 值2 值3 …(可以是一个文件等)
	do
		程序
	done
	
	这种语法中for循环的次数,取决于in后面值的个数(空格分隔),有几个值就循环几次,并且每次循环都把值赋予变量。
	也就是说,假设in后面有三个值,for会循环三次,第一次循环会把值1赋予变量,第二次循环会把值2赋予变量,以此类推。

语法二:
for (( 初始值;循环控制条件;变量变化 ))
	do
		程序
	done
	
语法二中需要注意:
初始值:在循环开始时,需要给某个变量赋予初始值,如i=1;

循环控制条件:用于指定变量循环的次数,如i<=100,则只要i的值小于等于100,循环就会继续;

变量变化:每次循环之后,变量该如何变化,如i=i+1。代表每次循环之后,变量i的值都加1。


#!/bin/bash
sum=0
for((i=1;i<=100;i++))
do
        sum=$[$sum+$i]
done

echo $sum

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n4NDuaDv-1677309668836)(../images/Pasted%20image%2020230225143744.png)]

#!/bin/bash
for i in $*
do
        echo $i
done

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PRZVYSF0-1677309668836)(../images/Pasted%20image%2020230225144054.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FWIYIvhx-1677309668836)(../images/Pasted%20image%2020230225144308.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DFXpzmjv-1677309668837)(../images/Pasted%20image%2020230225144326.png)]

while 循环

while [ 条件判断式 ]
	do
		程序
	done

#!/bin/bash
i=1
s=0
while [ $i -le 100 ]
#如果变量i的值小于等于100,
	do
		s=$(( $s+$i ))
		i=$(( $i+1 ))
	done
echo "The sum is: $s"

read读取控制台输入

基本语法:

read(选项)(参数)
选项:
-p :指定读取值时的提示符
-t :指定读取值时等待时间(秒)
参数:
指定读取值的变量名
(用来存变量的)

#!/bin/bash
read -t 7 -p "Enter your name: " Name
echo $Name

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gjyo4hy7-1677309668837)(…/images/Pasted%20image%2020230225144938.png)]

函数

系统函数

basename

就是在文件路径中,的到文件的名称

basename[string /pathname][suffix]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BduiOlRe-1677309668837)(../images/Pasted%20image%2020230225145428.png)]

看例子就懂了

dirname

dirname 文件绝对路径

去掉文件名后,返回路径

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EmC0cT36-1677309668837)(../images/Pasted%20image%2020230225145716.png)]

自定义函数

function 函数名 () {
	程序
}

要在函数调用之前声明函数

#!/bin/bash
function sum()
{
        s=0;
        s=$[ $1+$2 ]
        echo $s
}
read -p "nums1 " n1;
read -p "nums2 " n2;
sum $n1 $n2;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-88oRm4kT-1677309668837)(../images/Pasted%20image%2020230225150632.png)]

shell 工具

cut


就是从一个文件中剪切需要的内容
基本语法:

cut [选项参数] filename

选项参数:
-f :列号,提取第几列
-d :分隔符,按照指定分割符分割列

例子
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IgpUWuPw-1677309668838)(../images/Pasted%20image%2020230225151006.png)]

sed

一个流编辑器
语法:

sed[选项参数] 'command' filename

选项参数
-e : 直接在指令列模式上进行sed的动作编辑

命令功能描述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xg6d89UA-1677309668838)(../images/Pasted%20image%2020230225151319.png)]

示例
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ffZ632Pv-1677309668838)(../images/Pasted%20image%2020230225151412.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zvWcqdsT-1677309668839)(../images/Pasted%20image%2020230225151502.png)]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值