
Shell
Shell 脚本常用技术文章收集
卡尔特斯
联系方式:dengzemiao
GitHub: https://github.com/dengzemiao
掘金:https://juejin.im/user/4450440831840909
展开
-
Shell 三目运算(详细案例)
注意:代码块若用在函数中,是一连串的组合,那么可以使用。原创 2023-08-15 13:44:07 · 1039 阅读 · 0 评论 -
Shell VSCode 基本开发插件(语法提示、错误检测、格式化、运行代码)
默认检测比较严格,乱点代码其实也能跑起来,哈哈哈~!原创 2023-05-09 10:15:56 · 1620 阅读 · 0 评论 -
解决 Enter passphrase for key ‘/Users/dzm/.ssh/id_rsa‘:
在 git 配置 ssh 后,发现每次都需要输入密码:Enter passphrase for key '/Users/dengzemiao/.ssh/id_rsa': 解决方案:原因是因为没有把密码添加到 SSH-agent 中,打开终端:$ ssh-add -K /Users/你的电脑名称/.ssh/id_rsa然后按回车,输入密码,之后就可以不用再输入密码了!...原创 2022-03-17 11:55:49 · 5314 阅读 · 1 评论 -
Shell 变量初始化(有值用值,没值用初始值)
格式:${变量:-关键词}变量有值,则返回该变量的值。变量无值,则返回初始值# 输出 x 值echo ${x:-dzminit}# 输出结果dzminit# 对 x 进行赋值x=dzm# 输出 x 值echo ${x:-dzminit}# 输出结果dzm原创 2022-02-11 16:01:32 · 1577 阅读 · 0 评论 -
Shell 字符串操作(截取、替换、去头、去尾)
一、截取格式:${变量:起始位置:长度}# 字符串phone=0123456789# 从 1 索引位置开始截取,截取到尾部,包含 1 位置echo ${phone:1}# 输出结果123456789# 从 1 索引位置开始截取 6 位,包含 1 位置echo ${phone:1:6}# 输出结果123456# 从 1 索引位置开始截取,截取到倒数第 2 位,不包含倒数第 2 位,这种方式有的解释器不支持,会提示不能小于 0echo ${phone:1:-2}# 输出结果原创 2022-01-20 11:00:57 · 11723 阅读 · 0 评论 -
Shell mv 修改文件名、扩展名、文件夹名
格式:$ mv 文件/文件夹名 新文件/文件夹名批量修改文件后缀# 创建 a...f 6个 txt 文件touch {a,b,c,d,e,f}.txt# 列出当前目录所有 .txt 的文件进行遍历for item in $(ls *.txt); do # mv x.txt x.doc mv $item ${item%.*}.docdone批量修改文件名# 列出当前目录所有 .doc 的文件进行遍历for item in $(ls *.doc); do # mv ..原创 2022-01-20 10:40:15 · 2784 阅读 · 0 评论 -
Shell 中断与退出(continue、break、exit)
continue:结束单次循环# 变量 1-5for item in {1..5}; do # 等于 3 时,跳过继续循环 [ $item -eq 3 ] && continue # 输出 echo $itemdoneecho over# 输出结果:1245overbreak:结束循环体# 变量 1-5for item in {1..5}; do # 等于 3 时,结束循环 [ $item -eq 3 ] && b..原创 2022-01-19 15:44:49 · 2079 阅读 · 0 评论 -
Shell 函数使用(定义函数、函数传参)
在 Shell 环境中,将一些需要重复使用的操作,定义为公共的语句块,即可称为函数。格式与案例:方式一:function 函数名 { 命令...}方式二:函数名() { 命令...}# 定义函数function send1 () { echo '发送成功1'}function send2 { echo '发送成功2'}send3 () { echo '发送成功3'}# 调用函数send1send2send3函数传参# 定..原创 2022-01-19 15:35:53 · 1056 阅读 · 0 评论 -
Shell /dev/null 文件的含义
/dev/null代表 linux 的空设备文件,所有往这个文件里面写入的内容都会 丢失,俗称 黑洞。那么执行了 >/dev/null 之后,标准输出就会不再存在,没有任何地方能够找到输出内容。经常会看到 $>/dev/null 之类的代码,也就是不想这个命令的结果进行输出,也不需要输出或使用,直接走一遍命令即可。...原创 2022-01-19 15:33:37 · 1219 阅读 · 0 评论 -
Shell 数组使用( 及 @ 跟 * 的区别)
数组也是一个变量,有点特殊的变量,存储多个数据的集合就是数组。不同的 shell 解释器,索引起始位置也不一样,bash 从0 开始,csh,zsh 从 1 开始。# 定义数组$ arr=(11 22 33)# bash 解释器取出数组 0 索引的值$ echo ${arr[0]}11# csh、zsh 解释器取出数组 1 索引的值$ echo ${arr[1]}11@ 跟 * 的区别变量使用 * 时,变量被 "" ..原创 2022-01-19 14:53:13 · 743 阅读 · 0 评论 -
Shell case 语法简单案例
效果类似于多分支的 if 语句如果与预设的值相匹配,则执行对应的操作命令序列最后必须以分号结尾格式# 输入标识read -p "输入标识:" tag# 判断case "$tag" in # 单个选项 1) echo "tag = 1";; # 多个选项 2|3) echo "tag = 2 or tag = 3";; # 通配符,任意内容都行 *) echo "default";;esac案例read -p "Are ..原创 2022-01-19 14:32:09 · 430 阅读 · 0 评论 -
Shell while 语法(: 死循环)
while 语法格式# for 写法一:while [ 判断条件 ]do echo "循环输出"done# for 写法二:while [ 判断条件 ]; do echo "循环输出"done案例i=1while [ $i -le 5 ]; do echo "$i" let i++done输出:12345i=1# 通过 : 进行死循环,: 会一直为 truewhile :do echo "$i" let i++done..原创 2022-01-18 17:37:51 · 6539 阅读 · 0 评论 -
Shell for 语法(for()、forin)
for 语法格式# for 写法一:for ((初始值;条件;增长))do echo "循环输出"done# for 写法二:for ((初始值;条件;增长)); do echo "循环输出"done# forin 写法一:for item in 数据列表do echo "循环输出"done# forin 写法二:for item in 数据列表; do echo "循环输出"done{x..y}:代表的是 x 到 y 的所有值$ echo {..原创 2022-01-18 15:09:56 · 899 阅读 · 0 评论 -
Shell if else 条件判断
单分支语法:当 条件成立 时执行命令序列,否则不执行任何操作# 方式一:if [ 判断条件 ]then echo "正确"fi# 方式二:if [ 判断条件 ];then echo "正确"fi# 单条件if [ 判断条件 ];then echo "正确"fiif ((判断条件));then echo "正确"fi# 多条件if [ 判断条件 ] && [ 判断条件 ];then echo "正确"fiif [[ 判..原创 2022-01-18 11:38:03 · 801 阅读 · 0 评论 -
Ping 命令配置 -c、-i、-w 指令使用
使用格式及用意ping -c(设置 ping 的次数,默认无限次,可选) -i(设置 ping 的时间间隔,默认1秒,可选) -W(设置 ping 的超时时间,可选) 192.168.0.1通过 ping 192.168.0.1 举例# 直接 ping,无限次,1秒一次$ ping 192.168.0.1 PING 192.168.0.1 (192.168.0.1): 56 data bytes 64 bytes from 192.168.0.1: icmp_seq=0 ttl=6..原创 2022-01-17 14:55:24 · 46591 阅读 · 0 评论 -
Shell 过滤数据(cut 截取过滤列)
cut:用来从标准输入或文本文件中剪切列或域。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出,如果不指定 File 参数,cut 命令将读取标准输入,必须指定 -b、-c、-f 标志之一。参数含义-b输入每行第n个字符(半角,注意如果有中文将乱码)-c输入每行第n个字符(适用中文)-d自定义分隔符,默认为制表符-f与 -d 一起使用,指定显示哪个区域-n取消分割多字节字符(例如中文),仅和 -b 标志一起使..原创 2022-01-07 17:14:33 · 1224 阅读 · 0 评论 -
Shell 统计行数(wc -l)
wc -l:统计行数,原理就是统计了结果中的换行符数量。who:获取当前计算机的登录用户列表。案例# 这台电脑有几个用户登录了$ who | wc -l1# 当前目录下有几个文件夹$ ls | wc -l14原创 2022-01-07 16:45:02 · 4166 阅读 · 0 评论 -
Shell 删除多余重复的字符(tr -s)
tr -s:删除多余重复的字符,只会删除相连的重复字符,最少会保留一位。格式:tr -s "字符"# 删除多余的空格$ echo "a b c d" | tr -s " "a b c d# 删除多余的 a 与 空格$ echo "aaaaaab c d" | tr -s "a" | tr -s " "ab c d...原创 2022-01-07 16:36:57 · 2555 阅读 · 0 评论 -
Shell 组合多个命令(;、&&、||)
;:组合多个命令,命令1与命令2之间无逻辑关系,计算机会按顺序正常执行,不关心成功或失败,不影响执行顺序。&&:组合多个命令,但是命令之间是有逻辑关系的,前面命令执行成功,才会执行下一条命令。||:组合多个命令,但是命令之间是有逻辑关系的,前面命令执行成功,后面的命令不在执行。可以通过 &&、|| 进行多个条件判断[ 判断1 ] && [ 判断2 ][ 判断1 ] || [ 判断2 ]案例# ; 测试$ ls; ..原创 2022-01-07 13:42:11 · 2480 阅读 · 0 评论 -
Shell 文件或目录操作符(-e、-d、-f、-r、-w、-x)
操作符操作符含义-e判断对象是否存在(Exist),若存在则结果为真-d判断对象是否为目录(Directory),是则为真-f判断对象是否为一般文件(File),是则为真-r判断对象是否有可读(Read)权限,是则为真-w判断对象是否有可写(Write)权限,是则为真-x对象是否有可执行(eXcute)权限,是则为真测试,$? 含义# 是否存在$ [ -e /etc ]$ echo $?0# 是否为一个目录(文件夹)..原创 2022-01-07 11:19:57 · 6109 阅读 · 0 评论 -
Shell 整数值操作符(大小等与、-eq、-ne、-ge、-le、-gt、-lt)
操作符标题含义-eq等于(Equal)-ne不等于(Not Equal)-ge大于或等于(Greater or Equal)-le小于或登录(Less or Equal)-gt大于(Greater Than)-lt小于(Less Than)测试,$? 含义# 小于$ [ 3 -lt 8 ]$ echo $?0# 大于$ [ 3 -gt 8 ]$ echo $?1...原创 2022-01-07 11:10:24 · 2985 阅读 · 0 评论 -
Shell 字符串比较(是否为空、等于、不等于)
基本语法是否为空:[ -z 字符串 ]等于:[ 字符串1 == 字符串2 ]不等于:[ 字符串1 != 字符串2 ]注意:上面格式中的空格必须保持,必须空格隔开,$? 的含义。# 有值$ name=dzm$ [ -z $name ]$ echo $?1# 没值,$? 为输出上一条命令执行是否正常(0),还是异常(1)$ [ -z $name1 ]$ echo $?0...原创 2022-01-07 10:53:23 · 6718 阅读 · 0 评论 -
Shell 预定义变量 ($0、$$、$?、$#、$* 含义)
什么是 预定义变量 ?可以直接使用这些变量。不能直接为这些变量赋值。变量名含义$0当前所在的进程或脚本名$$当前运行进程的 PID 名$?获得上一条命令的执行状态,跟上上条命令无关,0 表示正常,1 或 其他值 表示异常$#已加载的位置变量的个数,也就是执行脚本时,后面跟的参数个数$*所有位置变量的值,也就是执行脚本时,后面跟的参数$? 举例:// 运行正常$ lstest.sh$ echo $?0// 运行..原创 2022-01-07 10:50:32 · 1884 阅读 · 0 评论 -
Shell echo 详细介绍(-n、-e、-e字体颜色背景以及其他配置项)
一、echo 基本使用echo 输出格式# 正常输出,默认输出后进行换行macbook$ echo "hello world"hello worldmacbook$# 加上 -n,输出后不进行换行,下一行的命令被连在了一起macbook$ echo -n "hello world"hello worldmacbook$# 加上 -e 设置字体颜色macbook$ echo -e "\033[32mhello world\033[0m"# 会输出绿色的文案hello world原创 2021-12-30 14:47:08 · 4442 阅读 · 0 评论 -
Shell 基本(整数、小数、浮点数)运算($[]、$(())、let、expr、awk、bc)
一、基本表达式运算表达式:expr:不支持浮点数计算,计算结果直接输出,中间必须存在空格。格式 expr 整数1 运算符 整数2 ...$[]:不支持浮点数计算,空格可有可无。格式 $[整数1 运算符 整数2 ...]$(()):不支持浮点数计算,空格可有可无。格式 $((整数1 运算符 整数2 ...))let:不支持浮点数计算,除了 let 后面有空格,计算中必定不能存在空格,只能赋值,不能直接输出,需要通过 echo 进行输出。格式 let 属性名=整数1+整数2原创 2021-12-30 14:00:52 · 4461 阅读 · 0 评论 -
Shell export 定义全局变量(变量的作用范围)
局部变量新定义的变量默认只能在当前的 shell 环境中有效,无法在 子shell 中使用。全局变量全局变量在当前 shell 与 子shell 环境中都有效。定义格式:$ export 变量名=值举例使用# 定义局部变量$ name=dzm$ echo $namedzm# 进入子shell$ sh# 输出变量为空sh-3.2$ echo $name# 退出sh-3.2$ exit# 定义全局变量$ export name=dzm$ echo $name..原创 2021-12-29 18:19:16 · 4507 阅读 · 1 评论 -
Shell read 键盘输入并复制给变量
使用格式$ read [-p "提示信息"] 变量名-p:可选,提示信息。-t:可选,指定超时秒数。-s:可选,设置是否在终端显示输入的内容,设置则为不显示,默认显示。上面配置项没有先后顺序,谁前谁后都行。举例# 举例# 没有任何限制,直接输入名称$ read name# 有提示信息$ read -p "请输入名称:" name# 有提示信息,输入不可见$ read -s -p "请输入名称:" name$ read -p "请输入名称:" -s name# ..原创 2021-12-29 18:07:27 · 700 阅读 · 0 评论 -
Shell 多种引号的区别(““、‘‘、``、$())
区分三种定界符"":双引号,允许扩展,以 $ 引用其他变量。'':单引号,禁用扩展,即便 $ 也视为普通字符。``:反引号,将命令的执行输出作为变量值,$() 与反引号效果一致,只能放命令。举例// "" 使用$ echo "$USER id is $UID"dzm id is 501// '' 使用$ echo '$USER id is $UID'$USER id is $UID// `` 使用$ test=`ls -l`$ echo $testto..原创 2021-12-29 17:52:28 · 1012 阅读 · 0 评论 -
Shell 变量使用(环境变量、预定义变量、位置变量、自定义变量的区别)
一、简介定义变量格式变量名=变量值注释事项= 两边不能有空格,不要使用关键字作为变量名,例如 ls、cd 等。如果变量名已经存在则覆盖之前的变量值。变量名称由 字母/数字/下划线 组成,不能以数字开始。取消变量格式,一般在脚本执行完毕之后,会自动回收取消,所以一般是用不上这个。unset 变量名查看变量格式,两种取值方式结果一致$变量名${变量名}但是 ${变量名} 可以处理一些细节情况,例如:// 定义 name=dzmdengzemiao原创 2021-12-29 17:30:11 · 670 阅读 · 0 评论 -
Shell 脚本后面添加参数
test.sh 脚本内容echo $0echo $1echo $2echo $3执行附带参数$ sh test.sh aa bb cc dd// $0 脚本文件路径test.sh// 脚本路径后第 1 个参数aa// 脚本路径后第 2 个参数bb// 脚本路径后第 3 个参数cc原创 2021-12-29 15:54:23 · 2925 阅读 · 0 评论 -
Shell 使用必懂基础知识点
一、简介切换解释器,查看当前解释器二、脚本编写规范规范#!脚本声明(使用哪种解释器解释代码)# 注释信息(步骤、思路、用途等),以 # 开始的都为注释信息# 可执行的脚本语句举例#!/bin/bash# 测试脚本echo "Hello World"三、执行命令的方式执行 .sh 文件(配置、介绍文件权限)交互式(命令行)人工干预逐条解释执行、效率低非交互式(脚本)需要提前设计批量执行、效率高通常写脚本,都希望原创 2021-12-29 15:23:10 · 252 阅读 · 0 评论 -
Shell 切换解释器,查看当前解释器
可以通过 chsh 修改解释器。查看当前所安装的解释器列表$ cat /etc/shells# List of acceptable shells for chpass(1).# Ftpd will not allow users to connect who are not using# one of these shells./bin/bash/bin/csh/bin/dash/bin/ksh/bin/sh/bin/tcsh/bin/zsh..原创 2021-12-29 14:26:22 · 1615 阅读 · 0 评论 -
Shell 执行 .sh 文件(配置、介绍文件权限)
创建一个文件夹$ mkdir shell创建一个 test.sh 脚本文件,并编辑添加内容。$ vim shell/test.sh添加输出内容:echo "Hello World"执行脚本$ sh shell/test.sh // 输出Hello World执行 .sh 脚本是需要执行权限的,有的文件夹新建或本身目录就没有 x 可执行权限,所以需要添加可执行权限,才能执行成功。$ chmod +x shell/test.sh添加 x 执行权限后,..原创 2021-12-28 11:56:35 · 2521 阅读 · 0 评论 -
Shell 管道 | 符号
|:什么叫管道?将前一条命令的输出结果通过管道传递给第二条命令作为它的输入信息。举例通过 ls 获得当前文件夹列表,然后通过管道传递给 grep 过滤出来包含 txt 字符的结果,并显示出来,grep 是过滤器命令。...原创 2021-12-28 11:18:11 · 798 阅读 · 0 评论 -
Shell 输入/输出的重定向含义(>、>>、2>、2>>、&>、&>>、1>&2、2>&1)
一、简介这里以 ls 命令进行举例。$ ls总结:一个 > 的是每次覆盖导出结果,两个 > 的是在文件尾部追加导出结果。>:导出成功结果,不支持导出失败结果。2>:导出失败结果,不支持导出成功结果。$>:支持导出上面两种结果,混合导出。如何区分是否导出成功?在屏幕上输出了就是导出失败,没有输出则导出成功。二、详细案例>:将命令运行 成功 结果导出到指定文件,只能导出 成功 的结果,失败/错误 的结果无法导出。$ ls &g原创 2021-12-28 11:07:05 · 1881 阅读 · 1 评论 -
Shell 脚本输出命令结果保持原格式,保留换行
shell 输出其他命令的结果时,需要保持原格式,比如不需要去除掉换行,加个 "" 包裹输出对象即可。result=$(ls -l)echo $resultecho "=============="echo "$result"原创 2021-12-13 18:20:27 · 4348 阅读 · 0 评论