Shell脚本到底是什么高大上的技术吗?

2023-11-19

本文介绍shell脚本知识。学习前最好有linux命令知识储备。

一篇文章看完,下次找工作时简历上请写上会shell脚本,栓Q。

shell脚本是什么?

shell脚本就是一个包含shell命令的脚本,常说的linux命令,也可以认为是shell命令。

运行shell脚本,可以实现如安装软件,更新软件,启动软件,重启软件等。比如,安装部署一个软件包,就需要执行shell脚本。这个shell脚本通常是开发工程师写的。

shell脚本后缀为.sh,如a.sh,要执行shell脚本,只需要三步

1、创建文件,编写文件内容。如a.sh

2、让脚本有可执行权限 chmod +x a.sh 

3、执行脚本 在命令行下执行 ./a.sh

Shell变量

变量命名

如 your_name="runoob.com" 

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线 _。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)

 引用变量 $yourname 或者${yourname} 花括号是可选的。

shell字符串

字符串可以用单引号,也可以用双引号,也可以不用引号。

str='this is a string'

获取字符串长度:

string="abcd"
echo ${#string}

在字符串变量前加#

提取子字符串

从字符串第 2 个字符开始截取 4 个字符:

string="runoob is a great site"
echo ${string:1:4} # 输出 unoo

注意:第一个字符的索引值为 0

 shell数组

数组名=(值1 值2 ... 值n)

数组元素的下标由 0 开始编号。

读取数组元素值的一般格式是:

${数组名[下标]}

使用 @ 符号可以获取数组中的所有元素,例如:

echo ${array_name[@]}

shell的echo命令

用于输出字符串至命令行

echo "你好"

 注意空格是echo后的空格必须有 

显示转义字符

echo "\"It is a test\""

需要在字符前用反斜杠

显示变量

echo $变量名

如echo $javahome

显示换行

echo -e "OK \n" 

其中-e为开启转移

 

 没有-e时输出效果

将结果输出至文件

echo "你好" > 文件名 

 文件不存在自动创建,若存在,则会清空原来内容写入新的内容。

显示命令执行结果

echo `date`

显示date命令的结果

 

shell传递参数

通过$n向shell脚本传递参数 $0表示执行文件的路径

示例:文件a.sh脚本如下:

echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";

执行:

输入执行文件命令时,写入参数,传入到脚本里并输出。

$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数。
如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$- 显示Shell使用的当前选项,与set命令功能相同。
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

 示例:

echo "Shell 传递参数实例!";
echo "传递到脚本的参数个数:$#"
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "单字符串显示传递给脚本的所有参数:$*";
echo "脚本运行的进程ID:$$";
echo "后台运行的最后一个进程的ID:$!"
echo "输出传递给脚本的所有参数:#@";
echo "显示shell使用的当前选项:$-";
echo "显示命令最后的退出状态:$?";
 

执行:

 

$* 与 $@ 区别:

  • 相同点:都是引用所有参数。
  • 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。

echo "-- \$* 演示 ---"
for i in "$*"; do
    echo $i
done

echo "-- \$@ 演示 ---"
for i in "$@"; do
    echo $i
done 

 

 Shell数组

只支持一维数组,不支持多维数组。

从下标0开始,元素用空格分开

定义数组

方式一:数组名=(value0 value1 value2...)

方式二:数组名[0]=value0

小惊喜:vi命令模式下 :%d可以清空文件内容

读取数组

读取数组元素值的一般格式是:

${array_name[index]}
my_array=(A B "C" D)

echo "第一个元素为: ${my_array[0]}"
echo "第二个元素为: ${my_array[1]}"
echo "第三个元素为: ${my_array[2]}"
echo "第四个元素为: ${my_array[3]}"

获取数组中的所有元素

使用@ 或 * 可以获取数组中的所有元素

my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D

echo "数组的元素为: ${my_array[*]}"
echo "数组的元素为: ${my_array[@]}"

获取数组的长度:

echo "数组元素个数为: ${#my_array[*]}"
echo "数组元素个数为: ${#my_array[@]}"

Shell printf 命令

默认的 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n。

printf  format-string  [arguments...]

参数说明:

  • format-string: 为格式控制字符串
  • arguments: 为参数列表。

echo "Hello, Shell"
printf "Hello, Shell\n"

另外printf可以格式化字符串

%s %c %d %f 都是格式替代符,%s 输出一个字符串,%d 整型输出,%c 输出一个字符,%f 输出实数,以小数形式输出。

Shell基本运算符

算术运算符

需要用其他命令如awk expr

#!/bin/bash

val=`expr 2 + 2`
echo "两数之和为 : $val"

 注意这里是反引号不是单引号 数字和运算符之间空格必须有

a=10
b=20

val=`expr $a + $b`
echo "a + b : $val"

val=`expr $a - $b`
echo "a - b : $val"

val=`expr $a \* $b`
echo "a * b : $val"

val=`expr $b / $a`
echo "b / a : $val"

val=`expr $b % $a`
echo "b % a : $val"

if [ $a == $b ]
then
   echo "a 等于 b"
fi
if [ $a != $b ]
then
   echo "a 不等于 b"
fi

 关系运算符

 a=10
b=20

if [ $a -eq $b ]
then
   echo "$a -eq $b : a 等于 b"
else
   echo "$a -eq $b: a 不等于 b"
fi
if [ $a -ne $b ]
then
   echo "$a -ne $b: a 不等于 b"
else
   echo "$a -ne $b : a 等于 b"
fi
if [ $a -gt $b ]
then
   echo "$a -gt $b: a 大于 b"
else
   echo "$a -gt $b: a 不大于 b"
fi
if [ $a -lt $b ]
then
   echo "$a -lt $b: a 小于 b"
else
   echo "$a -lt $b: a 不小于 b"
fi
if [ $a -ge $b ]
then
   echo "$a -ge $b: a 大于或等于 b"
else
   echo "$a -ge $b: a 小于 b"
fi
if [ $a -le $b ]
then
   echo "$a -le $b: a 小于或等于 b"
else
   echo "$a -le $b: a 大于 b"
fi

备注:shell脚本对空格敏感,如if后必须有空格 

布尔运算符

 逻辑运算符

字符串运算符 

 文件测试运算符

 if [ -r $file ]
then
   echo "文件可读"
else
   echo "文件不可读"
fi
if [ -w $file ]
then
   echo "文件可写"
else
   echo "文件不可写"
fi
if [ -x $file ]
then
   echo "文件可执行"
else
   echo "文件不可执行"
fi
if [ -f $file ]
then
   echo "文件为普通文件"
else
   echo "文件为特殊文件"
fi
if [ -d $file ]
then
   echo "文件是个目录"
else
   echo "文件不是个目录"
fi
if [ -s $file ]
then
   echo "文件不为空"
else
   echo "文件为空"
fi
if [ -e $file ]
then
   echo "文件存在"
else
   echo "文件不存在"
fi

 

Shell流程控制

if语句

if condition
then
    command1 
    command2
    ...
    commandN 
fi

if-else

if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi

if else -if else

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

判断两个变量是否相等 

a=10
b=20
if [ $a == $b ]
then
   echo "a 等于 b"
elif [ $a -gt $b ]
then
   echo "a 大于 b"
elif [ $a -lt $b ]
then
   echo "a 小于 b"
else
   echo "没有符合的条件"
fi

 

 for循环

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

in 列表可以包含替换、字符串和文件名。 

for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done

 

 while语句

while condition
do
    command
done

int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done 

while循环可用于读取键盘信息。

无限循环

无限循环语法格式:

while :
do
    command
done

 until循环

until 循环执行一系列命令直至条件为 true 时停止。

until condition
do
    command
done

使用 until 命令来输出 0 ~ 9 的数字:

#!/bin/bash

a=0

until [ ! $a -lt 10 ]
do
   echo $a
   a=`expr $a + 1`
done

 case ... esac

相当于switch case语句,多分支选择结构

每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case ... esac 语句,esac(就是 case 反过来)作为结束标记。

可以用 case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。

取值后面必须为单词 in,每一模式必须以右括号结束。取值可以为变量或常数,匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。

取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。

case 值 in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac

下面的脚本提示输入 1 到 4,与每一种模式进行匹配:

echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
    1)  echo '你选择了 1'
    ;;
    2)  echo '你选择了 2'
    ;;
    3)  echo '你选择了 3'
    ;;
    4)  echo '你选择了 4'
    ;;
    *)  echo '你没有输入 1 到 4 之间的数字'
    ;;
esac

跳出循环

break命令

break命令允许跳出所有循环(终止执行后面的所有循环)。

以下脚本为循环,当输入不是1到5之间的数字时跳出循环。

#!/bin/bash
while :
do
    echo -n "输入 1 到 5 之间的数字:"
    read aNum
    case $aNum in
        1|2|3|4|5) echo "你输入的数字为 $aNum!"
        ;;
        *) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"
            break
        ;;
    esac
done

continue

continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。

#!/bin/bash
while :
do
    echo -n "输入 1 到 5 之间的数字: "
    read aNum
    case $aNum in
        1|2|3|4|5) echo "你输入的数字为 $aNum!"
        ;;
        *) echo "你输入的数字不是 1 到 5 之间的!"
            continue
            echo "游戏结束"
        ;;
    esac
done 

运行代码发现,当输入大于5的数字时,该例中的循环不会结束,语句 echo "游戏结束" 永远不会被执行。 

Shell test 命令

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

数值测试 

num1=100
num2=100
if test $[num1] -eq $[num2]
then
    echo '两个数相等!'
else
    echo '两个数不相等!'
fi

代码中的 [] 执行基本的算数运算

字符串测试

num1="goodmorning"
num2="goodevening"
if test $num1 = $num2
then 
  echo "两个字符串相等"
else
  echo "两个字符串不相等"
fi 

if test $num1 != $num2
then
   echo "两个字符串不相等"
else
  echo "两个字符串相等"
fi

if test -z $num1
then 
  echo "字符串长度为零"
else
  echo "字符串长度不为零"
fi

if test -n $num1
then 
  echo "字符串长度不为零"
else
  echo "字符串长度为零"
fi
 

文件测试

if test -e a.sh
then echo "文件存在"
else echo "文件不存在"
fi


if test -r a.sh
then echo "文件可读"
fi

if test -w a.sh
then echo "文件可写"
fi

if test -x a.sh
then echo "文件可执行"
fi

if test -s a.sh
then echo "文件存在且至少有一个字符"
fi


if test -d a.sh
then echo "文件存在且为目录"
fi

if test -f a.sh
then echo "文件存在且为普通文件"
fi

if test -c a.sh
then echo "文件存在且为字符型特殊文件"
fi

if test -b a.sh
then echo "文件存在且为块特殊文件"
fi

 

 shell函数

在shell中可以定义函数,并调用。

demoFun(){
    echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"

 

 带有return的函数

funWithReturn(){
    echo "这个函数会对输入的两个数字进行相加运算..."
    echo "输入第一个数字: "
    read aNum
    echo "输入第二个数字: "
    read anotherNum
    echo "两个数字分别为 $aNum 和 $anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"

$?可以获取函数返回值

函数参数

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...

funWithParam(){
    echo "第一个参数为 $1 !"
    echo "第二个参数为 $2 !"
    echo "第十个参数为 $10 !"
    echo "第十个参数为 ${10} !"
    echo "第十一个参数为 ${11} !"
    echo "参数总数有 $# 个!"
    echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

 

$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。 

特殊字符用来处理参数:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shell脚本到底是什么高大上的技术吗? 的相关文章

  • linux脚本杀死java进程

    我想要linux脚本来杀死在控制台上运行的java程序 以下是作为 jar 运行的进程 rapp s1 dlap0 ps ef grep java rapp 9473 1 0 15 03 pts 1 00 00 15 java jar ws
  • 如何使用 bash/expect 检查 SSH 登录是否有效

    我的团队管理着许多服务器 公司政策规定这些服务器上的密码必须每隔几周更改一次 有时 我们的官方密码数据库会因某种原因而过时 人们通常会忘记更新它 但有时我们要到几个月后才能识别这一点 因为我们并不总是使用每台服务器 我想编写一个脚本 从数据
  • 为什么在 bash 中睡眠并等待?

    我无法理解此服务的启动命令docker compose yml https github com wmnnd nginx certbot blob master docker compose yml yml 中的两行相关内容是 comman
  • USR1 信号后可靠地终止睡眠进程

    我正在编写一个 shell 脚本 它定期执行任务并从另一个进程接收 USR1 信号 该脚本的结构类似于这个答案 https stackoverflow com a 27694965 1402511 bin bash trap echo do
  • 如何获取 bash 中的第 n 个位置参数?

    如何获得nBash 中的第一个位置参数 其中n是变量吗 使用 Bash 的间接功能 bin bash n 3 echo n 运行该文件 ind apple banana cantaloupe dates 生产 cantaloupe Edit
  • 将单个变量分配给数组(就地)

    考虑以下代码 a 1 2 3 a seven export a declare p a 输出 来自declare is declare ax a 0 seven 1 2 2 3 So a是一个数组 问题 如何改变第二行 所以a将不再是一个数
  • 使用 netcat 提供包含图像的 HTTP 响应

    我正在尝试使用 netcat 编写一个小型 HTTP 服务器 对于纯文本文件 这工作正常 但当我尝试发送图片时 浏览器仅显示损坏图像的图标 我所做的就是提取所请求文件的 mime 类型和大小 并将其发送给客户端 我的示例图片的请求标头如下所
  • Bash 命令行 Tab 完成冒号字符

    当参数中不包含特殊字符时 我已经使用 compgen 机制成功地为我的自定义命令实现了 bash 补全 current COMP WORDS COMP CWORD all get all items COMPREPLY compgen W
  • 使用 Shell 脚本自动安装 R-Studio

    有没有办法在 Linux 系统上自动安装 R Studio 它应该自动检测操作系统并安装具有所需依赖项的 R 和 R Studio 谢谢 我准备了以下 shell 脚本来使安装完全自动化 bin bash Program R Studio
  • 从文件中读取行,在第二个文件中 grep ,并为每个 $line 输出一个文件

    我有以下两个文件 sequences txt 158333741 Acaryochloris marina MBIC11017 uid58167 158333741 432 1 432 COG0001 0 158339504 Acaryoc
  • 关闭终端后保持express进程存活

    我试图在关闭终端后保持进程正常运行 是一个带有express的node js项目 基本上 对于其他进程 我通过以下方式保持进程处于活动状态 node server js 我这样就可以完成 SSH 连接并关闭控制台 但对于 Express 我
  • 如何在Linux shell脚本中将文本文件中的两行合并到同一行中

    我使用 wget 命令从 Nagios 下载了它的 html 文件 然后使用以下代码将该 html 文件转换为 Textfile html2text width 180 file html gt a txt 然后我剪切了前 10 行 因为我
  • 是否可以使用数组中存储的关键字执行 grep 操作?

    是否可以使用存储在数组中的关键字执行 grep 操作 这是可能的代码片段 我该如何纠正它 args key1 key2 key3 cat file name while read line echo line grep q w args c
  • 如何区分 git 分支名称和提交哈希?

    我有一个 bash 脚本 它接受分支名称 例如 master 或 feature foo 或提交哈希 例如 1234abcd 的字符串 我已签出存储库 因此我可以调用 git 确定字符串是分支名称还是提交哈希的最佳方法是什么 bin bas
  • 使用 Bash 比较 PHP 版本号?

    我有这个脚本 应该确保用户当前的 PHP 版本在某个范围内 尽管它应该可以工作 但某个地方有一个错误 使它认为版本超出范围 有人可以看一下并告诉我我能做什么来解决它 function version echo gawk F printf d
  • bash 脚本中带有 PKCS#12 证书的 cURL

    我必须连接到网络服务 其中必须有 pkcs12 证书 这个想法是在 bash 脚本中使用curl 具体来说 在 OS X 下 我了解到 curl 在通信中无法做的少数事情之一是处理 pkcs12 证书 p12 我有什么选择 我读过将证书转换
  • 如何向 gitlab-ci.yml 添加多行 bash EOD 命令?

    这个问题已被问过多次 但大多数问题都很容易解决 尽管使用工具expect它没有像我预期的那样工作 usr bin expect lt
  • Git:确定分支是否处于合并冲突状态

    我正在编写一个 bash 脚本来进行一些自动化操作 该脚本的一部分涉及导航到本地存储库 切换到本地 master 分支 然后拉取远程 master 以使用最新代码更新本地 master 分支 有谁知道是否有一种方法可以以编程方式确定拉取是否
  • 如何使用AWK从文件中连续输出行

    我有一个多行文件 我想连续输出文件的某些行 比如第一次 从第1行打印到第5行 下次 打印第2行到第6行 依此类推 我发现 AWK 是一个非常有用的函数 我尝试自己编写代码 但它什么也没输出 以下是我的代码 bin bash for n in
  • 获取 Bash 和 KornShell (ksh) 中命令的退出代码

    我想写这样的代码 command some command safeRunCommand command safeRunCommand cmnd 1 cmnd if 0 then printf Error when executing co

随机推荐

  • 搭建树莓派Pico交叉编译环境和工具链(arm-none-eabi-gcc)时可能会遇到的错误以及解决方案

    本文是一个类似手册的文章 用来记录可能遇到的错误 你可以通过侧栏选择遇到的错误来查看详细信息 No install step for ELF2UF2Build 遇到这种错误有两种原因 安装了版本不对或者不完整的arm none eabi g
  • 继电器、并联的二极管和驱动三极管选型实战演练

    继电器选型原则 继电器的选用原则参见下表 在表中 必须确定 栏中有 号的项目被确定之后 就可选定一款继电器 如果有进一步的要求 需要进一步考虑 参考 栏中有 号的相应项目 下面对表格中的所有参数进行详细说明 触点 1触点负载 确定继电器所能
  • 一篇文章了解爬虫技术现状

    本文全面的分析了爬虫的原理 技术现状 以及目前仍面临的问题 如果你没接触过爬虫 本文很适合你 如果你是一名资深的虫师 那么文末的彩蛋你可能感兴趣 需求 万维网上有着无数的网页 包含着海量的信息 无孔不入 森罗万象 但很多时候 无论出于数据分
  • list【2】模拟实现(含迭代器实现超详解哦)

    模拟实现list 引言 实现概述 list迭代器实现 默认成员函数 operator 与 operator gt operator 与 operator operator 与 operator 迭代器实现概览 list主要接口实现 默认成员
  • pnpm修改设置下载包的存储路径

    要修改 pnpm 存储依赖的路径 可以使用 pnpm 的 store 配置选项 通过更改 store 配置 可以指定 pnpm 存储依赖的目录位置 这在希望将依赖存储在不同磁盘分区 不同的硬盘驱动器或其他自定义位置时很有用 步骤 1 打开命
  • 9.2 流程分析

    介绍了系统文件加密和文件解密的流程 那么我们本例主要涉及两个核心函数个函数Encrypt File和Decrypt File 使用Encrypt File函数完成文件加密功能 Decrypt File函数完成文件解密功能 下面介绍这两个函数
  • 跟着官网编写一个LLVMPass

    官网地址 https llvm org docs WritingAnLLVMPass html introduction what is a pass 一 创建文件 1 项目结构为 llvm project lib Transforms H
  • TscanCode C/C++静态分析开源分析工具安装与使用

    TscanCode是腾讯静态分析团队开发的一款开源免费的C C 静态分析工具 由于其比较简单实用 准确率较高 并且扫描C C 代码不需要进行编译 所以个人觉得对C C 项目开发挺有帮助的 就简单介绍一下该工具的安装与使用 1 Tscanco
  • 文件包含漏洞-日志注入

    文件目录 一 文件包含漏洞 1 文件包含概述 2 文件包含类型 二 文件包含 日志注入 1 日志注入概述 2 环境准备 3 配置环境 4 模拟网站环境 三 日志注入流程 一 文件包含漏洞 1 文件包含概述 文件包含漏洞是 Web 应用程序中
  • springboot的优化

    在SpringBoot的Web项目中 默认采用的是内置Tomcat 当然也可以配置支持内置的jetty 内置有什么好处呢 在SpringBoot的Web项目中 默认采用的是内置Tomcat 当然也可以配置支持内置的jetty 内置有什么好处
  • 互联网JAVA面试常问问题(三)

    一 volatile原理和使用场景 volatile 原理 volatile变量进行写操作时 JVM会向处理器发送一条Lock前缀的指令 将这个变量所在缓存行的数据写会到系统内存 Lock前缀指令实际上相当于一个内存屏障 也成内存栅栏 它确
  • LED用DMX512协议整个系统怎么连接?

    提问1 EIA485规范只支持 雏菊链 或每段上最多以32个 单元负载 所构成的串行网络 DMX512不是可以支持512个通道吗 那是不是说 超过32个的情况下需要使用中继 提问2 控制器 接收端1 接收端2 接收端n 电阻 GND 这样的
  • BIO、NIO、AIO理解

    一 到底什么是BIO NIO AIO 这些可以理解为是Java语言对操作系统的各种IO模型的封装 程序员在使用这些API的时候 不需要关系操作系统层面的知识 也不需要根据不同操作系统编写不同的代码 只需要使用Java的API就可以了 二 B
  • Eclipse搭建stm32+jlink开发环境全攻略(进阶篇一)

    Eclipse搭建stm32 jlink开发环境全攻略 进阶篇 一 本篇开始讲解一些比较实用的东西 在前面的两章中 我们讲解了eclipse开发stm32的大部分问题 然而 在实际使用过程中 我们仍然会遇到一些不太理想的地方 比如 ecli
  • Leetcode力扣题解 - 30.串联所有单词的子串

    地址 30 串联所有单词的子串 力扣 LeetCode 一 思路 本题关键点是 1 所有关键词长度一致 2 匹配的是所有关键词连接起来的 大体思路 那么我们就可以从字符串头开始 每次只匹配关键词总长度个字符 如果匹配成功 在返回的数组中保存
  • HDMI中的视频时序分析

    一 前言 建立层次观念 说到时序 我们首先想到的例子是IIC SPI 串口等接口的例子 以我们之前的理解 时序就是传输线上电平随时间变化的顺序 但是但是但是 在HDMI这里 我们应该建立一个新的观念 即时序不一定对应到物理层 即传输线上 这
  • python--- end=“ , 单独的一行print()是什么意思

    有如下一道练习题 编写代码打印出下列图形 代码如下 for i in range 4 for j in range 5 print end print 其中end 意思是为末尾end传递一个空字符串 这样print函数不会在字符串末尾添加一
  • 工频干扰频谱测量_【鼎阳硬件智库译文

    英文原文 by Mratin Miller 汪进进 译 鼎阳硬件设计与测试智库发起人之一 简介 多通道串行数据链路容易受到串扰的影响 这些串扰可能来自于相邻通道 也可能是外部的干扰源 Aggressor 其结果是增加了受干扰通道 Victi
  • leetcode数组刷题总结与分析

    文章目录 小结 数组中元素的计算 子序列 任意元素 题目一 两数之和 题目15 三数的和 17 四数之和 16 最接近三数之和 167 两数之和 输入有序数组 560 和为k的子数组 523 连续的子数组的和 53 最大子数组和 713 乘
  • Shell脚本到底是什么高大上的技术吗?

    本文介绍shell脚本知识 学习前最好有linux命令知识储备 一篇文章看完 下次找工作时简历上请写上会shell脚本 栓Q shell脚本是什么 shell脚本就是一个包含shell命令的脚本 常说的linux命令 也可以认为是shell