shell学习
shell零基础学习
秃头披风侠2023
这个作者很懒,什么都没留下…
展开
-
while true
它的意思是“在条件为真的情况下,不断执行循环体中的代码”。由于这里的条件始终为真,因此该循环将会无限次地执行下去,除非在循环体内显式地跳出循环或者发生其他中断事件(如断电、程序崩溃等)。是一种常见的编程结构,在许多编程语言(包括 Shell、Python、JavaScript 等)中都有出现。结构,而是会在循环体内加入适当的条件判断语句,以便在满足特定条件时跳出循环。需要注意的是,在实际编程过程中,一般不会直接使用。原创 2024-04-15 10:55:34 · 105 阅读 · 0 评论 -
^[0-9]+$
是匹配字符串开始的意思,【0-9】意思就是只要是范围0-9里的东西都要,或者说只要不是数字都不要~+的意思的^[0-9]的范围里匹配一次以上~原创 2023-10-30 09:53:17 · 519 阅读 · 0 评论 -
shell source
命令会读取指定的脚本文件,并在当前 Shell 环境中执行该脚本文件的命令。这意味着,脚本文件中的变量、函数、以及其他命令都可以在当前 Shell 中生效,而不是在一个单独的子 Shell 中执行。是一个内置的命令,用于在当前 Shell 环境中执行指定的脚本文件,也可以用点号。命令后面的脚本文件必须具有可执行权限,否则可能会出现权限错误。执行后,你会在命令行上看到打印出的。source 脚本文件或脚本命令。在 Shell 脚本中,. 脚本文件或脚本命令。例如,假设有一个名为。原创 2023-07-19 10:54:25 · 971 阅读 · 0 评论 -
shell学习2
while循环默认以行读取文件,而for循环以空格读取文件切分文件 for循环通常用在循环次数确定的时候,而while循环用在次数不确定时。如果在循环结束后继续使用控制条件的那个变量,用while,否则用for。对某个存在多种取值的变量,对其中的每一种取值分别执行不同的命令,分支比较多判断条件比较简单用case比较方便。$0: 脚本自身的名称;$#:传入脚本的参数个数;$@$*: 传入脚本的所有参数;$$: 脚本执行的进程id;接收一个脚本参数x,并从0开始打印到x之间的所有整数。原创 2023-07-12 10:10:28 · 39 阅读 · 0 评论 -
shell练习
如果既不想把命令的输出结果保存到文件,也不想把命令的输出结果显示到屏幕上,干扰命令的执行,那么可以把命令的所有结果重定向到。2. shell的变量有什么作用,怎么定义一个shell脚本内部的变量,怎么从脚本外部传递一个变量到脚本内?更改shell设置:终端命令:chsh -s /bin/bash。怎么判断当前shell环境是bash还是csh?的垃圾箱,放入之后的数据被丢弃不能恢复。3. if/else判断语句怎么使用?6. /dev/null有什么作用?7. sshpass命令有什么作用?原创 2023-07-12 10:09:56 · 56 阅读 · 0 评论 -
//$‘\r‘
在给定的 tmux 命令中,${1//$'\r'} 的作用是将传递给脚本或命令行的第一个参数 $1 中的所有回车符替换为空格后赋值给环境变量 $IP_ARR。//$'\r' 是一个 Bash Shell 的特殊语法,它用于将字符串变量中的所有回车符 (\r) 替换成空格。表示 Bash Shell 的一种扩展操作符,用于替换一个字符或字符串中出现的所有匹配项。是一种 C 风格转义序列,表示回车符 (变量中查找并替换所有回车符 (原创 2023-07-12 10:09:06 · 300 阅读 · 0 评论 -
shell rsync
e 选项表示指定数据传输时所使用的远程 shell 程序。默认情况下,rsync 使用 rsh 或 ssh 进行远程操作,但是可以使用该选项修改其默认行为,在需要的情况下使用其他 shell 程序。例如,-e ssh 表示使用 SSH 协议进行数据传输。选项表示使用详细输出模式(verbose mode),即输出更多关于同步过程的信息。rsync 是一个常用的文件同步工具,可以在两台计算机之间同步、备份文件。表示保留符号链接(不跟随链接指向的文件)。表示保留文件的拥有者信息。表示保留文件的属组信息。原创 2023-07-12 10:08:34 · 245 阅读 · 0 评论 -
shell head
head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。head -n -5 test.txt 显示前(总行数-5)行的内容,比如一共20行,-5会打印前15行。head的-n选项:“5”等于“+5”显示前5行,不等于“-5”显示文件前 20 个字节: head -c 20 a.log。head -n 5 a.log 显示日志前五行的内容。head -n 1显示前1行。原创 2023-07-11 10:06:29 · 174 阅读 · 0 评论 -
shell 数组
echo ${array1[0]} #输出定义数组的第一个元素。echo ${array1[*]} #输出定义数组的所有元素。echo ${array1[@]} #输出定义数组的所有元素。echo ${array1[1]} #输出定义数组的第二个元素。shell中,用小括号( )来表示数组,数组元素之间用空格来分隔。原创 2023-07-11 10:05:58 · 51 阅读 · 0 评论 -
shell expr
有些特殊符号必须用 \ 进行转义(屏蔽其特殊含义),比如 * 和 () 如果不用 \ 转义,那么shell会把他们误解为正则表达式中的符号 ( * 对应通配符, ()对应分组)。除了可以实现整数计算,还可以结合一些选项对字符串进行处理,例如计算字符串长度、字符串比较、字符串匹配、字符串提取等。·出现在表达式中的运算符、数字、变量和小括号的左右两边至少要有一个空格,否则会报错。expr计算使用比较麻烦,建议使用(())、let 或者 $[]来进行整数计算。实例1:expr整数计算举例。原创 2023-07-11 10:03:42 · 67 阅读 · 0 评论 -
shell文件测试
判断 filename1 是否和 filename2 的 inode 号一致,可以理解为两个文件是否为同一个文件。判断文件是否存在,并且是否拥有 SUID 权限。判断文件是否存在,并且是否为字符设备文件。判断文件是否存在,并且是否为符号链接文件。判断该文件是否存在,并且是否为套接字文件。判断文件是否存在,并且是否为块设备文件。判断文件是否存在,并且是否拥有执行权限。判断文件是否存在,并且是否为目录文件。判断文件是否存在,井且是否为普通文件。判断文件是否存在,并且是否为管道文件。原创 2023-07-11 10:03:02 · 54 阅读 · 0 评论 -
shell字符串截取
其中,string表示要截取的字符,chars是指定的字符(或者子字符串),*是通配符的一种,表示任意长度的字符串。shell可以截取指定字符(子字符串)右边的所有字符,也可以截取左边的所有字符。请注意*的位置,因为要截取chars左边的字符,而忽略chars右边的字符,所以*应该位于chars的右侧。string是要截取的字符串,start是起始位置(从左边开始从0开始计数),length是要截取的长度(省略这个的话直接到字符串末尾)两种方式:从指定位置开始截取,从指定字符(子字符串)开始截取。原创 2023-07-11 10:02:27 · 1141 阅读 · 0 评论 -
shell字符串拼接
在shell中不需要使用任何运算符,将两个字符串并排放在一起就能实现拼接。对于第七行代码,$name和$url之所以不能出现空格,是因为。当字符串不被任何一种引号包围时,遇到空格就认为字符串结束了。对于第十行代码,加{}是为了帮助解释器识别变量的边界。,空格后边的内容会作为其他变量或者命令解析。原创 2023-07-11 10:01:53 · 1139 阅读 · 0 评论 -
shell中 | 、== 、=~ 、 &> 、|| && 的用法
该命令列出当前目录中的文档(含size),并把输出送给sort命令作为输入,sort命令按数字递减的顺序把ls的输出排序。=~表示左边的字符串是否包含右边的字符串,即右边字符串是否为左边字符串的子串。-s 是file size,-n是numeric-sort,-r是reverse,反转。管道符号,是unix一个很强大的功能,符号为一条竖线:"|"。1时STDOUT(标准输出),2是 STDERR(标准错误)"-eq"是判断字符串对应的数字值是否相等。"=="是判断字符串是否相等。&> 相当于 2>&1。原创 2023-07-11 10:01:20 · 1324 阅读 · 1 评论 -
shell echo
在终端窗口显示器上显示一段文字,一般起到一个提示的作用。换行,但下一行内容起始位置和上一行从\f处换行的位置对齐。换行,但下一行内容起始位置和上一行从\v处换行的位置对齐。换行字符,光标移至行首,输出\r后面的内容。插入nnn(八进制)所代表的ASCII字符。十六进制值表示的字节NNN(1到2个数字)八进制值表示的字节NNN(1到3个数字)不产生进一步输出,只输出\c之前的内容。换行,下一行内容和上一行内容对齐。反斜线,插入\字符 反斜线,插入tab水平制表符。原创 2023-07-11 09:57:42 · 40 阅读 · 1 评论 -
shell []
原创 2023-07-11 09:56:59 · 33 阅读 · 1 评论 -
shell [[]]
可以在[[]]中实现,[[]]支持&&、 ||和!if [[ -z $str1 ]] || [[ -z $str2 ]] ------------>不需要对变量名加双引号。[[]]是内置关键字,不是命令,在使用时没有给出函数传递参数的过程,所以test命令的某些注意事项再[[]]中就不存在了。elif [[$str1 < $str2 ]] ------------------>不需要也不能对 < 进行转义。test能做到的[[]]也能做到,而且做得更好,test做不到的,[[]]还能做到。原创 2023-07-10 10:23:27 · 327 阅读 · 1 评论 -
shell (())的作用
c=$((4+8, a+b)) #以最后一个表达式的结果作为整个(())命令的执行结果。再(())中使用变量无需加上$前缀,(())会自动解析变量名,这使得代码更加简洁。#echo $((3<8)) 3<8是成立的,因此输出了1,1表示真。对于多个表达式的情况,以最后一个表达式的值作为整个(())命令的执行结果。((i=i*2)) --->可以简写为((i*=2))#echo $((8<3)) 8<3是不成立的,因此输出0,0表示假。实例:利用(())进行逻辑运算。原创 2023-07-10 10:22:41 · 63 阅读 · 1 评论 -
shell read
Enter some information > C语言中文网。都是可选的,如果没有提供变量名,那么读取的数据将存放到环境变量。表示用来储存数据的变量,可以有一个或多个。实例1:使用read命令给多个变量赋值。echo "网站名字: $name"echo "网址: $url"echo "年龄: $age"实例2:只读取一个字符。网站名字:C语言中文网。原创 2023-07-10 10:22:00 · 167 阅读 · 1 评论 -
shell case
如果expression和某个pattern匹配成功,就会执行这个pattern后面对应的所有语句(该语句可以有一条也可以有多条),直到遇到双分号或者esac才停止,然后整个case语句就执行完了,程序会跳出整个case语句,执行esac后面的语句。expression可以是一个变量,一个数字,一个字符串,还可以是一个数学计算表达式,或者是一个命令执行的结果,只要能得到expression的值就可以。最后一个分支可以写;除最后一个分支外,(这个分支可以是普通分支可以是*)分支),其他的每个分支都必须以。原创 2023-07-10 10:21:13 · 76 阅读 · 1 评论 -
for循环python风格
每次循环都会从value_list中取出一个值赋给变量variable,然后进入循环体(do和done之间的都分),执行循环体中的statements。seq是一个Linux命令,用来产生某个范围内的整数,并且可以设置步长,seq 2 2 100表示从2开始,每次增加2,到100结束。取值列表value_list的形式有多种,可以直接给出一个具体的值,也可以给出一个范围,还可以使命令产生结果,甚至使用通配符。ls是一个Linux命令,用来列出当前目录下所有文件,*.sh的文件。可以省略,省略后效果相当于。原创 2023-07-10 10:20:36 · 37 阅读 · 1 评论 -
for循环(C语言风格)
for循环中的exp1(初始化语句)、exp2(判断条件)和exp3(自增或自检)都是可选项,都可以省略(但是分号;2)再执行exp2,如果判断条件成立,则执行循环体中的语句,否则结束整个循环。第二次循环时,i的值为2,i<=100成立,继续执行循环体。2)和3)合并在一起算作一次循环,会重复执行,for语句的主要作用就是不断执行2)和3)。重复执行步骤2,直到101次循环,此时i的值为101,i<=100不成立,结束循环。接下来执行循环体中的语句,等循环体执行结束后(sum的值为1),再计算i++。原创 2023-07-10 10:20:05 · 44 阅读 · 1 评论 -
shell里 $意思
其中$@与$*正常情况下一样,当在脚本中将$*加上双引号作为“$*”引用时,此时将输入的所有参数当做一个整体字符串对待。比如输入参数有a b c三个参数,则“$*”表示“a b c”一个字符串。: 上一条命令执行后的状态,结果为0表示执行正常,结果为1表示执行异常;:后台运行的最后一个进程的ID。$1: 传入脚本的第一个参数;$2: 传入脚本的第二个参数;$0: 脚本自身的名称;$$: 脚本执行的进程id;$@: 传入脚本的所有参数;$#:传入脚本的参数个数;$*:传入脚本的所有参数;原创 2023-07-10 10:15:22 · 1024 阅读 · 1 评论 -
sshpass
直接远程连接主机:sshpass -p 密码 ssh root@ip ------>远程主机默认端口是22。从远程主机上拉取文件到本地:sshpass -p 密码 scp root@ip:/远程文件目录/远程服务器文件 /本地文件目录/-f ------->指定文件。远程连接指定的ssh端口:sshpass -p 密码 ssh。root@ip ----->远程主机默认端口不是22。常用参数:-p ------->指定密码。sshpass 参数。原创 2023-07-10 10:14:33 · 315 阅读 · 1 评论 -
定义和调用函数
return value表示的函数的返回值,其中return是shell的关键字,专门用在函数中返回一个值;url --------------->函数调用。fuction url() ---------->函数定义。shell函数在定义时不能指明参数,但是在调用时可以传递参数,并且给他传递什么参数就接收什么参数。当调用函数时可以给它传递参数,也可以不传递,如果不传递直接给出函数名即可。原创 2023-07-10 10:14:02 · 38 阅读 · 1 评论 -
shell while循环
每一次执行到done的时候都会重新判断condition是否成立,如果成立就进入下一次循环,继续执行do和done之间的语句,如果不成立,就结束整个while循环,执行done后面的其它shell代码。在while循环中,只要条件成立,循环就会执行。对于这段代码,只要i的值小于等于100,循环就会继续,酶促循环给变量sum加上变量i的值,然后在给变量i加1,知道变量i的值大于100,循环才会停止。这样就完成一次循环。i++ ------>使i的值逐步增大,让判断条件越来越趋于不成立,最终退出循环。原创 2023-07-10 10:12:50 · 46 阅读 · 1 评论 -
if/else判断语句怎么使用
如果condition成立,那么then后面的statement1语句将会被执行,否则执行后面的statement2语句。如果所有的condition都不成立,那么就进入最后的else,执行statementn。如果condition1不成立,就执行elif,判断condition2;如果condition1成立,就执行statement1;如果condition2成立,就执行statement2;如果if和then在同一行,判断条件后面要加分号。如果有两个分支就可以使用if else语句。原创 2023-07-05 10:29:14 · 103 阅读 · 1 评论 -
shell 特殊变量
代表上一条命令的结果返回的值,命令执行成功返回0值;失败返回非0值 , return 退出函数时获取的返回值(0-255,超过部分%256取余)PATH是系统执行文件查找的路径,USER是用户变量,不同的用户其$USER是不同的,HOSTNAME是主机名,这些都是在用户登录完毕后自动识别的。位置变量稍微有点特殊,使用 $1,$2,$3 …特殊变量包括:环境变量,只读变量,位置变量,预定义变量。:PATH , USER , HOSTNAME等等。$# :代表脚本后跟的参数个数。:只能查看不可更改。原创 2023-07-05 10:08:04 · 108 阅读 · 1 评论 -
shell变量
如果我们建立三个子bash,然后将name赋值为hzf,并定义为全局变量,然后再建立两个子bash,然后输出值为hzf,是因为在之前在前面的子bash环境中定义了全局变量,所以输出hzf,当我们将子bash多次退出后,发现name值为空,这是因为我们之前实在第四个bash中定义的全局变量,现在我们推出了四次,应该位于第二bash中,也就是说我们定义的全局变量bash环境已经被我们退出了,所以全局变量也就失效了。hzf----------------------->输出的值。$变量名:表示赋予变量的值。原创 2023-07-04 11:02:15 · 361 阅读 · 1 评论 -
shell sed
sed -n '\%/BIN/bash%Ip' /etc/passwd或sed -n '/\/BIN\/bash/Ip' /etc/passwd。以n个长度分割匹配到的行,并以结尾,如以长度为4个字符分隔含有root的行:sed ‘/root/ l 4′ /etc/passwd。打印行号,如显示含有root所在的行号:sed -n ‘/root/=’ /etc/passwd。s表示替换,\%就表示百分号,s/\%//将%替换为空,最后的g标志表示全部替换。原创 2023-07-04 11:00:34 · 102 阅读 · 1 评论 -
shell引号的作用
被单引号括起来的字符都是普通字符,就算特殊字符也不再有特殊含义。(`命令字`):将命令执行完的结果传给前面 ,和$(命令)作用一样。:会将$等特殊符号当成普通字符。$(命令)------>执行命令。:允许通过$符号引用其变量值。#定义变量name的值是sc。,则$name原封不动地输出。,则会输出变量name的值。原创 2023-07-05 10:11:16 · 115 阅读 · 1 评论 -
shell awk
^d/{sum+=$5} END{print "total size is",sum}' //计算文件大小。awk -F'[:#/]' '{print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12}' helloworld.sh //制表符分隔输出多字段。awk -F'[:#]' '{print $1,$2,$3,$4,$5,$6,$7}' OFS='\t' helloworld.sh //制表符分隔输出多字段。原创 2023-07-05 00:00:00 · 119 阅读 · 0 评论 -
从脚本外部传递一个变量到脚本内
vi test.sh/bin/bashecho $1echo $2echo $3123。原创 2023-07-05 10:12:00 · 59 阅读 · 1 评论