sh脚本-常用命令

2023-11-04


最近碰到的命令

1.curl密令

curl -d '{"content": "S0765056F"}' -H 'Content-Type: application/json' -X POST https://www.baidu.com
curl --location --request POST 'https://www.baidu.com' --header 'Content-Type: application/json' --data-raw '{ "key": "value"}'

一、基础命令(Unix命令)

Rundeck是一个基于Java和Grails的开源的运维自动化工具,提供了Web管理界面进行操作,同时提供命令行工具和WebAPI的访问控制方式。像Ansible之类的工具一样,Rundeck能够帮助开发和运维人员更好地管理各个节点。

1.运行sh脚本命令:

./xxx.sh文件:当前目录,该命令必须给.sh文件加x执行权限
/home/epay/uploadserver_wql/xxx.sh:绝对路径

sh xxx.sh :当前目录,该命令不需要赋权限
sh /home/epay/uploadserver_wql/xxx.sh:绝对路径,该命令不需要赋权限

cmd1 && cmd2:执行cmd1和cmd2两个命令
sh -c "cmd1 && cmd2":执行-c后字符串中的命令。如:sh -c “./1.sh && ./test.sh”

2.echo命令:

  • echo -n:不换行输出
  • echo -e:将转义后的内容输出到屏幕上,常见转义字符:\b(删除前一个字符)、\c、\n、\f、\t

3.exit命令:

  • exit 0:代表正常运行程序并退出程序
  • exit 1:代表非正常运行导致退出程序

两个的区别只有一点,即表示程序(sh脚本)的运行结果不同,在 shell 中调用完程序(sh脚本)之后,用 echo $? 命令就可以看到程序的 exit 值。在 shell 脚本中,通常会根据上一个命令的 $? 值来进行一些流程控制。

4.sed命令

sed是一个基本的查找替换程序。可以从标准输入(比如命令管道)读入文本,并将结果输出到标准输出(屏幕)。

比如:将linuxfocus 替换为LinuxFocus :cat text.file | sed 's/linuxfocus/LinuxFocus/' > newtext.file

sed命令是一个面向字符流的非交互式编辑器,也就是说sed不允许用户与它进行交互操作。sed是按行来处理文本内容的。在shell中,使用sed来批量修改文本内容是非常方便的。

sed [选项] [function]

选项:

  • -n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
  • -e :直接在命令列模式上进行 sed 的动作编辑;
  • -f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
  • -r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
  • -i :直接修改读取的文件内容,而不是输出到终端。
  • -c:use copy instead of rename when shuffling files in -i mode???

function:

  • a :新增行, a 的后面可以是字串,而这些字串会在新的一行出现(目前的下一行)
  • c :取代行, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
  • d :删除行,因为是删除,所以 d 后面通常不接任何参数,直接删除地址表示的行;
  • i :插入行, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  • p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
  • s :替换,可以直接进行替换的工作,通常这个 s 的动作可以搭配正规表示法,例如 1,20s/old/new/g
    一般是替换符合条件的字符串而不是整行

所有的新增,删除,替换行,这些命令前面的地址修饰都可以指定地址空间,也都可以使用正则表达式,命令会应用在选出的符合地址条件的所有行上面。

  • m,n 表示对m和n行之间的所有行进行操作,也包含第m行和第n行。
  • $表示最后一行,例如:m,$d就是删除m行以及其后面的所有行内容。
  • 可以对某一行进行操作,例如:2d表示仅仅删除第2行。
  • 可以使用正则表达式选出符合条件的行,并对这些行进行操作,在sed中正则表达式是写在 /…/ 两个斜杠中间的。比如:/2/ 表示所有包含2的行,/^2/ 表示以2开头的行。
sed '1,2d' test.xx 		# 删除第一行和第二行,d表示删除
sed '/2/d' test.txt		# 删除所有包含2的行
# a命令表示在指定行的后面附加一行,
sed '1a hello world' test.txt	# 在第一行后添加hello world,如果a的前面没有地址限定,则在所有行后面都会添加
sed '1i hello world' test.txt	# 命令i表示在指定的行的前面插入一行,插入的内容为其后面的字符串
sed '1c hello world' test.txt 	# 命令c会替换指定的行的所有内容,替换成其后面的字符串,

# sed中除了上面的命令是针对整行进行操作的之外,还提供一个替换命令,该命令对某一行中的部分字符串进行操作
# s/待替换的字符串/新字符串/
sed 's/aa/AA/' test.txt		# 替换每一行遇到的第一个aa
sed 's/aa/AA/g' test.txt	# g表示进行全局替换,每一行中所有符合条件的旧字符串都会被替换成新字符串
sed '5,$s/aa/AA/g' test.txt	# 第5行直到文件末尾的所有行进行搜索替换操作
sed '/^[0-9]/s/aa/AA/g' test.txt	# 该正则表达式表示对所有以数字开头的行,执行s操作

# sed还提供一个p命令用于搜索符合条件的行,并输出该行的内容,而不做其他的任何修改
# 实际上sed默认情况下是会将所有标准输入的数据又重新输出到标准输出的
sed '2p' test.txt		# 将文件的所有内容输出了一遍,而第2行则多输出了一次,
# 我们可以加上 -n 选项让sed仅仅是输出经过处理之后的那些行,而不是输出之前从标准输入中获取到的所有行内容
# -n 选项一般是与p命令联合使用的,其他的增加,删除,替换行的命令是不需要 -n 选项的
sed -n '2p' test.txt	# 仅输出p命令的处理结果了,只输出第2行

5.cut命令

cut命令可以从一个文本文件或者文本流中提取文本列。比如:输出每行第5-9个字符cut -b 5-9 file.txt
cut命令主要是接受三个定位方法:

[root@localhost ~]$ date
2011年 08月 11日 星期四 20:44:52 EDT
[root@localhost ~]$ date |cut -b 10,1-7  # cut会先把-b后面所有的定位(1-7,10)进行从小到大排序,再提取
2011年8
[root@localhost ~]$ date |cut -c 5,9,13
年月日

[root@localhost ~]$ echo $PATH
/zzy/zookeeper-standlone/bin:/zzy/hbase-0.98.8-hadoop2/bin:/zzy/hadoop-2.6.0/bin:/zzy/hadoop-2.6.0/sbin:
/usr/local/java/jdk1.7.0_79/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]$ echo $PATH | cut -d ':' -f 1-3,5
/zzy/zookeeper-standlone/bin:/zzy/hbase-0.98.8-hadoop2/bin:/zzy/hadoop-2.6.0/bin:/zzy/hadoop-2.6.0/sbin:/usr/local/sbin:/usr/local/bin:/sbin

  • 1.字节(bytes),一个空格算一个字节,一个汉字算三个字节。用选项-b
  • 2.字符(characters),中文字符和空格都算一个字符。用选项-c
  • 3.域(fields),用选项-f,与 -d 一起使用。-d指定域分隔符,-f 指定要剪出哪几个域。-d选项的默认间隔符就是制表符(\t),所以当你就是要使用制表符的时候,完全就可以省略-d选项,而直接用-f来取域就可以了。

6.awk命令

awk 用来从文本文件中提取字段。缺省地(不指定时),字段分割符是空格,可以使用-F指定其他分割符。

  • cat file.txt | awk -F, '{print $1 "," $3 }':-F指定,为字段分割符,并打印第一、三个字段。如果该文件内容下:Adam Bor, 34, IndiaKerry Miller, 22, USA。命令输出结果为:Adam Bor, IndiaKerry Miller

7.ls命令

ls [选项] [目录名]
-t 表示以时间排序
-d 表示对于目录,只列出目录(不递归列出目录内的文件)
-i 输出文件的 i 节点的索引信息。
-l 列出文件的具体信息(小写L)。

  • ls:不带任何参数,列出当前目录下所有文件和目录(不递归列出目录内的文件)
  • ls [通配符]:如果匹配多个,则会列出当前目录下和通配符匹配的文件和目录(会递归列出目录内的文件);如果只匹配到一个文件,则会列出该文件;如果只匹配到一个目录,则会列出该目录下所有的文件和目录(不再递归列出目录内的文件)
  • ls 文件名:当前目录存在,则列出文件名;不存在报错。
  • ls 目录名:当前目录存在,则列出目录下文件和目录(不再递归);不存在报错。

注意:当使用通配符、具体文件名或目录名时,并且名称以-开头(如:名为-ac的目录),则使用命令时,需在前边加–(如:ls -- -ac ls -- *a*

  • ls -td -- */:列出当前文件夹下,匹配*/的文件和目录(不递归),目录名可以-开头。*/表示列出目录,因为文件名称不会带/;
  • ls -I name1 -I name2:列出当前文件夹下,除了name1 和name2的文件和目录。(注意:和小写i含义不同)

8.cat命令

cat命令是linux下的一个文本输出命令,通常是用于观看某个文件的内容的;
cat主要有三大功能:

  • cat filename:一次显示整个文件。
  • cat > filename:从键盘创建一个文件。只能创建新文件,不能编辑已有文件。
  • cat file1 file2 > file:将几个文件合并为一个文件。

其它命令:

  • wc –l file wc -w file wc -c file: 计算文件行数、计算文件中的单词数、计算文件中的字符数
  • cat file.txt: 输出文件内容到标准输出设备(屏幕)上
  • find: 搜索文件。比如:根据文件名搜索find . -name filename -print
  • mkdir [选项] 目录名称:-p 创建多级目录,目录存在时不会给出目录存在的提示信息,而是若目录已经存在,则不创建;若是不存在,则创建新目录
  • grep -v "grep":反向查找,查找不含有 grep 字段的。如:查看包含 ‘/home/helife/tomcat-wap/’ 但不包含 “grep” 的进程 ps -ef | grep '/home/helife/tomcat-wap/' | grep -v "grep"
  • cp -f file dir:拷贝文件,-f选项,强制拷贝文件
  • rm:-r 选项,递归删除目录,可删除空目录;-f选项,强制删除超级用户所创建的文件。
  • unlink [参数] 文件名:是用于删除单个文件的命令行实用程序,其功能效果与rm命令一致,选择习惯用的就好。用于删除符号连接时,符号链接指向的文件并不会被删除;用于删除指定的文件,您需要对包含该文件的目录具有写权限。 否则,将出现“不允许操作”错误;在GNU/Linux系统中,不能用于删除一个目录。
  • readlink [参数] [文件]:找出符号链接所指向的位置
  • chmod -R 755 file
  • ln -s 源文件 目标文件: -s 表示软连接,只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间;没有参数-s表示硬链接,会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。
  • head -n 1 文件名:显示文件中的前1行。-n表示行;-c表示字节;
  • wget --no-check-certificate url:下载文件到当前目录,–no-check-certificate用于下载https的资源
  • unzip [选项] 压缩包名 -d 目的地目录:-o表示不必先询问用户,unzip执行后覆盖原有的文件

set -e:该命令之后出现的代码,一旦出现了返回值非零,整个脚本就会立即退出,不会继续执行命令。当管道的非最后一个命令返回非零值,出现例外,使用下面命令解决。
set -o pipefail:pipeline中的命令出错了,把这个非零返回值往后传递,作为整行命令的返回值。如果一个pipeline里面有多个命令执行返回非零值,后面的会覆盖前面的。


二、变量、正则表达式、转义字符

1.变量:

系统中的变量根据作用域及生命周期可以分为四类:本地变量、环境变量、全局变量、内置变量

0.export说明(父 shell 与子 shell)
1.父 shell:用户登录到Linux系统后,系统将启动一个用户shell。在这个shell中,可以使用shell命令或声明变量,也可以创建并运行 shell脚本程序。

2.子 shell:运行shell脚本程序时,系统将创建一个子shell。此时,系统中将有两个shell,一个是登录时系统启动的shell,另一个是系统为运行脚本程序创建的shell。当一个脚本程序运行完毕,它的脚本shell将终止,可以返回到执行该脚本之前的shell。

3.export说明:在子shell中定义的变量只在该子shell内有效。如果在一个shell脚本程序中定义了一个变量,当该脚本程序运行时,这个定义的变量只是该脚本程序内的一个局部变量,其他的shell不能引用它,要使某个变量的值可以在其他shell中被改变,可以使用export命令对已定义的变量进行输出。export命令将使系统在创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。

4.总结:当前父shell中定义变量中,分为本地变量和环境变量,不同点是局部变量只能作用于本父shell,子shell无法继续使用,如果使用了export将局部变量定义为全局变量,那么父shell在创建子shell的时候会将该变量一同复制给子shell的环境。

1.本地变量(局部变量、用户变量、临时变量、自定义变量):用户自定义的变量,定义在脚本或者当前终端(会话)中,脚本执行完毕或终端(会话)结束变量失效。

  • 变量名='变量值':定义变量
  • export 变量名:将变量提升为全局环境变量,供其他Shell程序使用
  • export 变量名='变量值':直接定义,并暴露为全局变量
 A=1
 $AB      # 此时表示AB是一个变量名,而系统中不存在该变量,所以输出值为空
 ${A}B    # 此时会输出1B,表示系统将A看作变量
 
 B=(1 2 3 4 5)
 ${a[0]}				# 数组中第一个元素
 ${a[@]:0:3} 	# 数组中1-3个元素
 ${#a[@]}			#数组中元素的个数

2.环境变量:定义在用户家目录下的.bashrc或.bash_profile文件中,用户私有变量,只能本用户使用,可在多个sh脚本中使用。在环境关闭后,变量就会失效。

  • env查看当前用户的环境变量,常用环境变量:$HOME$PWD$SHELL$USER等;
  • set查看当前用户的所有变量(临时变量与环境变量)
  • export A=hello:定义一个临时变量,临时将一个本地变量(临时变量)变成环境变量(全局变量)
  • vim .bash_profile 或者 ~/.bashrc A=hello:定义一个永久生效变量

3.全局变量

  • 使用export命令将本地变量输出为当前shell中的环境变量(临时有效)
  • 在 /etc/profile 下永久定义,所有用户及shell都可以使用。vim /etc/profile source /etc/profile

4.内置变量(系统变量、特殊变量):内置bash中变量,shell本身已经固定好了它的名字和作用

  • $n :n为数字,$0为该脚本名称,$1-$9为第1-9个参数,10以上的参数需用大括号,如${10}
  • $#:执行脚本时,输入参数个数,常用于循环
  • $*:执行脚本时,输入的所有参数,把所有的参数看成一个整体
  • $@:执行脚本时,输入的所有参数,不过会把每个参数区分对待,执行main函数命令main "$@"
  • $?:最后一次执行的命令的返回状态(或脚本的返回值)。0,非0分别表示上一个命令执行正确、错误。
    若退出状态值为0,表示命令运行成功
    若退出状态值为127,表示command not found
    若退出状态值为126,表示找到了该命令但无法执行(权限不够)
    若退出状态值为1&2,表示没有那个文件或目录
  • $$:当前所在进程的进程号,如:kill -9 `echo $$` 退出当前会话

2.正则表达式:

正则表达式是一种可以用于模式匹配和替换的工具。通过正则表达式,Shell可以使用一系列的特殊字符构建匹配模式,然后将匹配模式与待比较字符串或文件进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。

1.通配符用于模式匹配,如字符串查找、文件名匹配与搜索等。 常用通配符有以下6种。

ls *log*     			# 含有log字符串,log.log os.log
ls a?c       			# adc apc
ls [abc-fp]  			# 表示a、b、c、d、e、f、p之中的任一字符。
ls [!ab]     			# 表示不是a或b的任一字符。c e f
# ls命令不会把^和$识别为特殊符号,而是作为文件和目录的一部分,因此需要使用管道和grep -E这个选项支撑正则表达式。
ls | grep -E ^ubuntu   	# ubuntu_linux 
ls | grep -E linux$   	# ubuntu_linux 
  1. *(星号):表示任何字符串,可以匹配空字符串。
  2. ?(问号):表示任何单个字符。
  3. [](一对方括号):表示一个字符序列。除连字符“-”之外,其他特殊字符在[]中都是普通字符,包括*和?。
  4. !(感叹号):在[]中使用!表示排除其中任意字符。
  5. ^(幂符号):只在一行的开头匹配字符串。
  6. $(美元符号):只在行尾匹配字符串,它放在匹配单词的后面。

2.模式表达式:模式是那些包含一个或多个通配符的字符串,各模式之间以竖线(|)分开。bash除支持上述通配符外,还提供了以下特有的扩展模式匹配表达式。

ls file*(.c|.o) # 匹配文件file、file.c、file.c.c、file.c.o、file.o、file.o.c、file.o.o等,不匹配file.h、file.s等
ls file+(.c|.o)	# 匹配文件file.c、file.c.c、file.c.o、file.o、file.o.c、file.o.o等,但不匹配file。	

ls file?(.c|.o) # 只匹配文件file、file.c、file.o等,不匹配file.c.c、file.c.o等。
ls file@(.c|.o) # 只匹配文件file.c和file.o,但不匹配file、file.c.c、file.c.o等。

ls file!(.c)	# 可以匹配file、file.c.c、file.c.o、file.o、file.o.c、file.o.o,但不匹配file.c。
  1. *:匹配任意多个模式。(注:匹配0个或多个模式)
  2. +:匹配一个或多个模式。(注:匹配1个或多个模式)
  3. ?:匹配模式表中任何一种模式。(注:匹配0个或1个模式)
  4. @:仅匹配模式表中一个给定模式。(注:匹配1个模式)
  5. !:除给定模式表中的一个模式之外,它可以匹配其他任何字符串。

3.转义字符:

echo "hello\
world"				
#显示以下结果
helloword
  • \回车:下一行是当前行的续行
  • \n:换行
  • \t:水平制表
  • \r:回车
  • \a:警告
  • \b:回格

4.用户变量命名时,反引号(``)、单引号(‘’)、双引号(“”)的区别

echo -e "\a现在时间 \n `date`"    
# 现在时间
#  Sat Jul  1 16:58:12 CST 2023
 
echo 'hello \n world'	
# hello \n world
str=hello
echo '$str' 			
# $str

str=hello
echo -e "$str \n world"  # echo 输出的时候加上-e 表示识别转义字符,默认不识别
# hello
#  world

1.反引号(``):包含的内容,做为 shell 命令被执行,执行结果替换原内容。使用反短斜线可以将一个命令的输出作为另外一个命令的一个命令行参数。
tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`:查找过去24小时(-mtime –2则表示过去48小时)内修改过的文件。将所有查找到的文件打一个包。

2.单引号(‘’):又叫硬转义,其内部所有的shell 元字符、通配符都会被关掉, 包含的变量名称不会被解析,任何字符都会原样输出。

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

3.双引号(“”):又叫软转义,可以存在通配符,也可存在变量,会被解析。


三、管道、重定向

这些不是系统命令,但是他们真的很重要。

1.管道

管道 (|) 将一个命令的输出作为另外一个命令的输入。
grep “hello” file.txt | wc -l

2.输入/输出重定向

重定向:将命令的结果输出到文件,而不是标准输出(屏幕)。

  • command > file:将输出重定向到 file。命令执行command然后将输出的内容存入file,覆盖旧文件。
  • command < file:将输入重定向到 file。本来需要从键盘获取输入的命令会转移到文件读取内容。
  • command >> file:将输出以追加的方式重定向到 file。加到文件的尾部,保留旧文件内容
  • n > file:将文件描述符为 n 的文件重定向到 file。
  • n >> file:将文件描述符为 n 的文件以追加的方式重定向到 file。
  • n >& m:将输出文件 m 和 n 合并。
  • n <& m:将输入文件 m 和 n 合并。
  • << tag:将开始标记 tag 和结束标记 tag 之间的内容作为输入。

一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:

  • 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
  • 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
  • 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
$ command > file 	# 将 stdout 重定向到 file。
$ command < file 	# 将stdin 重定向到 file。
#将stderr 重定向到 file、追加到 file 文件末尾
$ command 2>file
$ command 2>>file	
将 stdout 和 stderr 合并后重定向到 file
$ command > file 2>&1
$ command >> file 2>&1
#command 命令将 stdin 重定向到 file1,将 stdout 重定向到 file2。
$ command < file1 >file2

如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null。/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是/dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。

$ command > /dev/null
#cmd 2>stderr.txt 1>stdout.txt == cmd> output.txt 2>&1
$ command > /dev/null 2>&1  # 屏蔽 stdout 和 stderr, 2 和 > 之间不可以有空格,2> 是一体的时候才表示错误输出。
$ command 2> /dev/null			# 忽略掉错误提示信息

四、流程控制

1.if命令

if语句会运行if后面的那个条件(命令),如果该命令的退出状态码是0(该命令成功运行),位于then部分的命令就会被执行。如果该命令的退出状态码是其他值, then部分的命令就不会被执行,bash shell会继续执行脚本中的下一个命令。

if command1
then
	commands
else
	if command2
	then
		commands
	fi
fi

1.用于数值比较、字符串比较、文件比较的单方括号[expression](test命令)

a=6
if [ $a -gt 5 ]
then
	echo "a>5"
fi
  • 数值比较:-eq、-ge、-gt、-le、-lt、-ne(不等)
  • 字符串比较:=、!=、<、>;-n str1(str1长度是否非 0)-z str1(str1长度是否为 0)
  • 文件比较-d file(file存在并是一个目录)、-e file(存在)、-f file(存在并是一个文件)-L(存在并是一个符号链接)、-r file(存在并可读)、-s file(存在并非空)、-w file(存在并可写)、-x file(存在并可执行)、-O file(存在并属当前用户所有)、-G file(存在并且默认组与当前用户相同)、file1 -nt file2( file1比file2新)、file1 -ot file2 (file1比file2旧)

2.用于数学表达式的双括号 (( expression ))

a=10
if (( $a ** 2 > 90 ))
then
	(( b = $a ** 2 ))
	echo "The square of $a is $b"
fi
  • 数学表达式:val++(后增)、val–、++val、–val、 !(逻辑求反)、~ (位求反)、 ** (幂运算)、 << (左位移) 、 >>(右位移) 、&(位布尔和)、|(位布尔或)、&&(逻辑和)、||(逻辑或)

3.用于高级字符串处理功能的双方括号 [[ expression ]]

if [[ $usr == r* ]] # 双方括号命令:对$usr环境变量进行匹配,看它是否以字母 r 开头。
then
	echo "Hello $user"
else
	echo "Sorry, I do not know you"
fi
  • 脚本中使用了双等号( == )。双等号将右边的字符串( r* )视为一个模式,并应用模式匹配规则。
  • 注意,不是所有的shell都支持双方括号。

2.case命令

s="word"

case $s in
    "hello") echo This is hello;;
    "word") echo This is word;;
    "A" | "B") echo good;;
esac

3.select命令

echo "What is your favourite OS?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; 
	do echo "You have selected $var"
	break
done

What is your favourite OS?
1) Linux
2) Gnu Hurd
3) Free BSD
4) Other
#? 1
You have selected Linux

4.loop命令

while ....;
	do ....
done

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

sh脚本-常用命令 的相关文章

随机推荐

  • STM32通过PWM驱动两个直流电机

    STM32F103单片机通过PWM控制直流电机 测试的时候可以通过以下方式进行电机正负端测试 使用TIM2的通道1和2进行pwm输出 即PA0 PA1引脚 PA0控制左电机pwm PA1控制右电机pwm PA11 PA12控制左轮 PA11
  • 北京地区常用dns地址解析速度快

    北京地区常用dns地址解析速度快 为了提高网页的访问打开速度我们可以配置一些解析速度较快的dns 首先可以在我们的客户端打开cmd命令行工具测试一些 去ping 一下下面的这些dns地址 看看哪一个延迟最低 把它配置到我们的客户端里即可 北
  • 说说Burst Compiler 的架构原理

    一 Burst Compiler的基本介绍 Burst Compiler是Unity的一种编译器 它可以将C 代码编译为高效的本地代码 从而提高Unity应用程序的性能 Burst Compiler的优势在于它可以自动将C 代码转换为本地代
  • 特征工程系列:时间特征构造以及时间序列特征构造

    0x00 前言 数据和特征决定了机器学习的上限 而模型和算法只是逼近这个上限而已 由此可见 特征工程在机器学习中占有相当重要的地位 在实际应用当中 可以说特征工程是机器学习成功的关键 那特征工程是什么 特征工程是利用数据领域的相关知识来创建
  • ML算法——线代预备知识随笔【机器学习】

    文章目录 数学预备知识 3 线性代数 3 1 矩阵奇异值分解 SVD 3 2 广义逆矩阵 Moore Penrose 3 3 数据白化 Data Whitening 3 4 向量导数 4 其它 数学预备知识 3 线性代数 3 1 矩阵奇异值
  • ES6中数组新增了哪些扩展?

    一 扩展运算符的应用 ES6通过扩展元素符 好比 rest 参数的逆运算 将一个数组转为用逗号分隔的参数序列 console log 1 2 3 1 2 3 console log 1 2 3 4 5 1 2 3 4 5 document
  • 微信小程序中断请求的处理,中断 wx.request() 请求

    在微信小程序中 向后台发出一个请求A 如果长时间后台不返回相应的数据 前端还处于接受状态 这样会引起一些问题 那么就可以在前端代码中直接中断当前的请求 下面发出一个请求 const task wx request url xxxxxxx m
  • 网页显示服务器拒绝了链接,网页出现服务器拒绝链接

    网页出现服务器拒绝链接 内容精选 换一换 主机管理的云服务器列表中仅显示以下主机的防护状态 在所选区域购买的华为云主机已接入所选区域的非华为云主机在所选区域购买的华为云主机已接入所选区域的非华为云主机若未找到您的主机 请切换到正确的区域后再
  • 西门子S7-200SMART控制步进电机(五)

    目录 一 软硬件组成 二 手动控制步进电机旋转方向和速度 三 命令运动轴转以指定的速度运动到所需的位置 四 CPU掉电重启后保持运动控制的当前位置 前面详细讲述了运动控制向导的配置和运动控制指令的使用方法 接下来要讲的是简单程序的编写和调试
  • 【读一读论文吧】BERT

    沐神论文精读B站地址 https www bilibili com video BV1PL411M7eQ spm id from 333 788 paper https arxiv org pdf 1810 04805 pdf usg AL
  • eclipse中报的错:An internal error occurred during: "reload maven project". java.lang.NullPointerExceptio

    在eclipse中新建一个maven项目 进行相应的设置 忽然就卡死了 再次打开就会报出这样的错误 查了下往上很多的解决的方法都是 找到workspace文件夹下的 metadata文件夹 将其删除掉 然后在讲项目重新导入进去eclipse
  • vue+springboot前后端分离项目部署到windows服务器全部流程

    vue springboot前后端分离项目部署到windows服务器 最近看了若依的前后端分离的vue项目 代码撸了一遍之后想要将服务器和前端打包部署到本地windows中 记录自己的部署 一 后端部署 目录结构 项目工程下的pom文件是整
  • CSS面试题26-30

    26 margin 重叠问题的理解 相关知识点 块级元素的上外边距 margin top 与下外边距 margin bottom 有时会合并为单个外边距 这样的现象称为 margin合 并 产生折叠的必备条件 margin必须是邻接的 而根
  • 程序中如何新增微信商户

    1 需要的信息 1 用于微信支付的公众号appid 2 用于微信支付的公众号appkey 3 商户号 4 APIv3密钥 商户支付密钥 V3版本 5 商户证书公钥 apiclient key pem路径 API证书 商户证书 6 微信支付平
  • java int long越界问题_输出越界问题 和 long long 的两数加法问题

    注意方面一 测试 边界的数值 考虑会不会越界 注意方面二 在使用时注意这一点 如下文 直接相加 和赋值后相加不一样 pay more attention 代码 include long long a 44 long long b 44 lo
  • 如何用ChatGPT写出爆款小红书文案,仅3个步骤,快get起来!

    小红书越来越流行了 很多商家和个人都在上面搞运营推广 想要在这个平台众多的内容和用户中脱颖而出 就需要付出很多的时间和精力 你想知道如何快速写出爆款文案 吸引更多的用户浏览 点赞以及关注吗 我发现一个非常好用而且很简单的方法 轻松写出6w
  • 使用Python快速进行Excel合并

    本文记录工作中常遇到的几种Excel文件合并的情景 实际运到问题可以直接运行程序 输入要合并的文件所在的路径就可以实现自动合并 提升工作效率 情形一 Excel属于同一文件夹下 同一文件夹下多个Excel合并 import pandas a
  • Win7复制文件时出现:“您需要权限来执行操作!”(终极解决方法!)

    最近 装了win7需要倒数据 但总是出现 您需要权限来执行操作 提示 而使复制终断 很挠头 后来 发现 原来是 杀毒软件 惹的祸 做程序的朋友请注意 程序复制程序时关闭杀毒软件的2个理由 1 真不知道现在的 杀毒软件 怎么做的 一点水平也没
  • sudo权限

    1 概念 sudo权限就是root把本来只能超级用户执行的命令赋予普通用户执行 sudo的操作对象是系统命令 2 visudo 我们使用visudo来设置sudo 实际上修改的就是 etc sudoers这个文件 3 如何设置sudo权限
  • sh脚本-常用命令

    文章目录 最近碰到的命令 1 curl密令 一 基础命令 Unix命令 1 运行sh脚本命令 2 echo命令 3 exit命令 4 sed命令 5 cut命令 6 awk命令 7 ls命令 8 cat命令 其它命令 二 变量 正则表达式