Shell编程(四)---Shell内建命令简介

2023-10-27

命令
我们从一个Shell脚本的内部执行两种类型的命令。也就是通常(normal)的命令,这样的命令我们也可以在命令行的方式下来运行,称为处部命令,另一种就是我们前面所说的内建(built-in)命令,称之为内部命令。内建命令是在Shell的内部来实现的而不能为外部程序所调用。然而大多数的内部命令也会作为相对独立的单一程序来提供,而这也是POSIX 标准所要求的一部分。通常来说内部命令与外部命令并没有太大的区别,除非是这个内部运行得更为高效。
然而在这里我们只会讨论一些主要的命令,包括我们编写一下脚本时所需要用到的外部与内部命令。作为一个Linux用户我们会知道一些其他的可以在命令行来运行的命令。我们应该记住除了我们在这里所提到一些内建命令以后我们还可以在脚本中使用我们所知道的一些其他的命令。
break
当我们要从一个for,while或是until循环中退出时我们可以使用这个命令。我们也可以传递给break另外一个数字参数,而这个数字参数正是我们要退出的循环次数。因为这样会使得我们的脚本变得难于阅读,所以我们并不推荐大家来使用这样的方式。在默认的情况下,break只会退出单一的层次。如下面的例子:
#!/bin/sh
rm -rf fred*
echo > fred1
echo > fred2
mkdir fred3
echo > fred4
for file in fred*
do
    if [ -d “$file” ]; then
        break;
    fi
done
echo first directory starting fred was $file
rm -rf fred*
exit 0
:命令
冒号命令只是一个空命令。这个命令用来作为true的别名而简化逻辑条件是相当有用的。因为他是一个内建的命令,所以他运行得要比true快速,然而他的输出却并不是易于理解的。
我们可以看到在while循环中使用这个命令。while :可以替代更为常见的while true来实现无限的循环。
:结构在变量的设置条件中也是相当有用的,例如:
: ${var:=value}
如果没有:,shell会试着将$var作为一个命令来对待。
#!/bin/sh
rm -f fred
if [ -f fred ]; then
    :
else
    echo file fred did not exist
fi
exit 0
continue
与C语言相类似,这个命令可以使得for,while,until中的变量使用列表中的下一个值继续执行下一次循环。
#!/bin/sh
rm -rf fred*
echo > fred1
echo > fred2
mkdir fred3
echo > fred4
for file in fred*
do
    if [ -d “$file” ]; then
          echo “skipping directory $file”
        continue
    fi
    echo file is $file
done
rm -rf fred*
exit 0
continue命令后可以跟一个用来作为一个可选参数的数字,这样我们就可以部分的跳出嵌套循环。然而这样的参数并不常用,因为这样会使得我们的脚本难于理解。例如:
for x in 1 2 3
do
   echo before $x
   continue 1
   echo after $x
done
这个脚本的输出结果如下:
before 1
before 2
before 3
。命令
。命令会在当前的Shell中执行命令:
。 。/shell_script
通常情况下,当一个脚本执行一个外部的命令或是脚本时,就会创建一个新的循环或是子Shell,这个外部命令会在新的环境下运行,然而这个新的环境就会无视返回给父Shell的返回代码。但是外部的资源和。命令使得被调用脚本中所列出的命令在同一个环境下来运行。
这样就意味着在通常的情况下命令对环境变量所做的修改会丢失。而另一方面,。命令可以允许被执行的命令改变当前的运行循环。当我们要使用一个脚本作为包装来为后来一些其他命令的运行设置环境时是相当有用的。例如:如果我们同时在几个不同的工程上进行工作,有时我们就会发现我们需要使用一个不同的参数来调用命令,也许是调用一个老版本的编译器来维护一个古老的程序。
在Shell脚本中,。(dot)命令的工作方式与C或是C++中的#include的工作方式相类似。虽然他并不真正包含一个脚本,但是他确实是在当前的条件下运行命令,所以我们可以使用这个命令在一个脚本中进行变量或是函数定义的合并。
在下面的这个例子中,我们在命令行的方式下使用dot命令,但是我们也可以在一个脚本中使用这个命令。
1 假设我们有两个文件,而这两个文件所包含是为两个不同的开发环境所做的环境设置。要为古老的,经典的命令设置环境,classic_set,我们可以使用下面的命令:
#!/bin/sh
version=classic
PATH=/usr/local/old_bin:/usr/bin:/bin:.
PS1=”classic> “
2而对于新的命令我们使用latest_set:
#!/bin/sh
version=latest
PATH=/usr/local/new_bin:/usr/bin:/bin:.
PS1=” latest version> “
我们可以使用dot命令将这些脚本进行合并来设置环境,如下面的操作:
$ . ./classic_set
classic> echo $version
classic
classic> . latest_set
latest version> echo $version
latest
latest version>
echo
仅管在现代的Shell中使用printf命令,但是在这里我们仍然遵循通常的习惯来使用echo命令后跟新行字符的字符串。
一个通常的问题就是如何来禁止一个新行字符。不幸的,不同版本的Unix实现了不同的解决方法。在Linux中通用的作法是:
echo -n “string to output”
但是也许我们常会看到下面的情况:
echo -e “string to output/c”
在第二种方法,echo -e确保允许解释一些转义字符,例如新/t解释为tab,而将/n解释为回车换行。这在通常的情况下是默认的设置
eval
eval命令允许我们进行参数的赋值。他是Shell的内建命令而并不作为一个单独的命令而存在。下面一个从X/Open所借用来的简短的例子可以很好的说明这个问题。
foo=10
x=foo
y=’$’$x
echo $y
这个例子的输出结果为$foo,然而如果我们用下面的例子:
foo=10
x=foo
eval y=’$’$x
echo $y
这样的输出结果就为10.这样eval就有一些像另外的一个$:他会提供给我们一个变量的值。
eval命令是非常有用的,他会允许我们随时创建和运行代码。他确实会将脚本的高度复杂化,但是他却会允许我们做一些平常来说非常困难甚到是不可能的事情。
exec
exec命令有两种不同的用法。他最通常的用法是用一个不同的程序来替换当前的Shell。例如;
exec wall “Thanks for all the fish”
在脚本中会使用wall命令来替换当前的Shell。在exec命令之后的脚本内容不会处理,因为执行这个脚本的Shell已经不存在了。
exec的第二种用法就是用来修改当前文件的描述符:
exec 3< afile
这个结果是是为了从文件afile文件中读入内容而打开文件描述符3.这样有用法并不常见。
exit n
exit命令会使得脚本返回返回代码。如果我们是在交互的Shell中运行这个命令,他就会使得我们退出会话。如果我们不指定我们的脚本不指定返回状态而退出,那么脚本中上一次命令的执行结果就会作为返回值。通常指定返回值是一个很好的做法。
在Shell编程中,返回代码0为成功,1到125是错误代码,这些错误代码可以为脚本所使用。保留的值具有保留的含义:
126    文件是不可执行的
127    命令没有找到
128及以上    发生信号
使用0作为成功代码在许多的C或是C++程序员看来会有一些的不同。这最大的优点就是在脚本中允许我们使用125种用户定义的错误代码而不需要全局错误代码变量。
在下面这个例子中,如果在当前的目录下存在。profile文件就回成功值。
#!/bin/sh
if [ -f .profile ]; then
    exit 0
fi
exit 1
如果我们是一个甘受惩罚的人或者是需要简洁的脚本,我们可以用我们在前面见过的AND和OR列表来重写我们的脚本,而将所有的内容放在一行:
[ -f .profile ] && exit 0 || exit 1
export
export命令可以使得变量以其子Shell中的参数进行命令.在默认的情效况下,在一个Shell中所创建的变量在另一个所调用的Shell中并不是可见的.export命令可以由他的参数创建一个环境变量,这个变量可以为当前程序中所调用的其他的脚本或是程序可见.更为技术的一点来说,由任何子进程序所引进的环境变量是由这个Shell派生的.这个命令的含义以及用法可以从下面的两个脚本export1和export2来很好的进行演示.
我们先列出export2的脚本内容:
#!/bin/sh
echo “$foo”
echo “$bar”
下面的是export1中的内容,在这个脚本的结尾处我们调用export2:
#!/bin/sh
foo=”The first meta-syntactic variable”
export bar=”The second meta-syntactic variable”
export2
如果我们运行这个脚本我们可以得到下面的结果:
$ export1
The second meta-syntactic variable
$
之所以发生第一行的空行是因为在export2中变量foo并不是可见的,所以$foo被赋值为空值,输出一个空的变量就会得到一个新行.
一旦一个变量由一个Shell引入,那么他在由这个Shell中所派生的或是在这个Shell中所依次调用的脚本中都是可见的.如果脚本export2调用了另一个脚本,那么对于另一个脚本来说这个变量的值仍然是可见的.
命令set -a或是set -allexport可以引入所有的变量.
expr
expr命令会将他的参数作为一个表达式来对待.他最常见的用法是用在如下面形式的简单算术中:
x=`expr $x + 1`
在这里的反引号(`)是将命令expr $x+1的结果作为变量x的值.我们也可以用语法$()来写这个句子而不使用反引号的形式,如下面的形式:
x=$(expr $x + 1)
expr命令是一个相当强大的命令,他可以处理许多表达赋值的问题.他的一些原则如下表所示:
expr1 | expr2    如果expr1不为空则为expr1,否则为expr2
expr1 & expr2    如果expr2或是expr1为零则为零,否则为expr1
expr1 = expr2    相等
expr1 > expr2    大于
expr1 >= expr2    大于等于
expr1 < expr2    小于
expr1 <= expr2    小于等于
expr1 != expr2    不等于
expr1 + expr2    相加
expr1 - expr2    相减
expr1 * expr2    相乘
expr1 / expr2    整数相除
expr1 % expr2    整数取模
printf
printf命令只在现代的Shell中可用.X/Open建议我们最好应使用echo来产生格式化的输出.
语法格式如下:
printf “format string” parameter1 parameter2 ...
字符串的格式与我们在C或是C++中所见到的相类假,只是有一些限制.主要的区别在于Shell并支持浮点数,因为Shell中的所有算术运算都是作为整数来处理的.格式化字符串可以由字母,转义序列和转义符的任何组合来构成.在格式化字符串中除了%和/的所有字符都可以进行精确的输出.
下面列出的是可以支持的转义序列:
//    反斜线
/a    警告
/b    退格
/f    形成输入字符
/n    新行字符
/r    回车
/t    Tab字符
/v    垂直Tab
/ooo    由八进制表示的单个字符
转义字符是相当复杂的,所以我们在这里只是列出一些我们会常用到的内容.更为详细的内容可以在在线的bash手册中得到.转义字符是%和紧跟其后的要转义的字符组成的.下面列出一些主要的转义字符:
d    输出十进制数
c    输出一个字符
s    输出一个字符串
%    输出%字符
然后我们会使用格式化字符串来解释其余的参数并进行结果的输出.例如:
$ printf “%s/n” hello
hello
$ printf “%s %d/t%s” “Hi There” 15 people
Hi There 15   people
在这里我们要注意我们必须使用""来使得Hi There字符串成为一个单一的参数.
return
return命令会使得一个函数返回.我们在前面的一些函数的用法中已经注意到了这一点.return命令会返回一个单一的数字参数,而这个数字参数在调用这个函数的脚本中是可见的.如果没有指定返回参数,return在默认情况下会返回上一次命令的返回代码.
set
set命令会为Shell设置参数变量.这对于在输出由空格区分的命令中使用域是很有用的一个方法.
假如我们要在我们的Shell脚本中使用当前月份的名字.系统提供了一个日期的命令,这个命令含有字符串形式的月份,但是我们需要将他与其他的区域进行分离.我们可以使用set命令和$(...)结构的组合来执行日期命令并返回结果.日期命令的输出是将月份的字符串作为他的第二个参数.
如下面的例子:
#!/bin/sh
echo the date is $(date)
set $(date)
echo The month is $2
exit 0
这个程序为date命令的输出设置了参数列表,并且使用第二个参数$2来得到月份的名字.
在这里我们要注意的是我们使用date命令来作为一个简单的例子来展示如何解开位置参数.因为date命令是与语言设置有关的,而事实上我们可以使用命令date +%B来得到月份的名字.date还有许多其他的格式选项,我们可以从他的手册页中得到更为详细的说明.
我们还可以使用set命令来控制通过传递Shell参数的Shell执行方式.这最通常的用法是使用命令set -x,这样就会使得一个脚本显示他当前执行命令的轨迹.
shift
shift命令可以使得所有的参数变量值减1,这样$2就会变为$1,而$3就会变为$2,依次类推.这样以后$1的值就会丢弃,而$0的值会保持不变.如果在调用shift命令时指定了一个数字参数,那么这些参数也会移动一些相应的位置.而其他的一些变量,$*,$@,$#也会为新的参数变量的范围进行相应的修改.
shift命令在参数之中进行扫描是相当有用的,如果我们的脚本需要10个或是更多的参数,那么我们就需要使用shift来访问10个或是更多的内容.
作为例子,我们可以像下面的形式来扫描所有的位置参数:
#!/bin/sh
while [ “$1” != “” ]; do
    echo “$1”
    shift
done
exit 0
trap
trap命令可以用来指定在收到信号时所要进行的动作.一个常见的用法是在一个脚本被中断时所做的处理工作.由于历史的原因,Shell总是使用数字来代表信号,但是新的脚本可以通过#include signal.h并且忽略SIG前缀来使用信号的名字.如果我们要查看信号的数字和其相关的名字我们可以在命令提示下输入trap -l命令.
trap命令可以通过紧跟信号的名字的方式来传递将要进行的动作:
trap command signal
我们要记住通常情况下脚本是从上到下进行解释的,我们必须在我们要保护的脚本部分之前来指定trap命令.
要将一个trap的条件设置为默认的情况,我们可以简单的将命令指定为-.要忽略一个信号,我们可以将命令设为空串``.一个没有任何参数的trap命令会打印出当前的动作列表.
下面的表格列出了一些比较重要的标准的X/Open信号,这些信号都可以被捕获.更为详细的内容我们可以从信号手册中得到.
HUP(1)    挂起.通常是当一个终端离线或是用户退出时发出.
INT(2)    中断.通常是通过按下Ctrl+C发出的.
QUIT(3)    退出,通常是由Ctrl+/发出的.
ABRT(6)    中止,通常是由一些严重的运行错误发出的.
ALRM(14) 警告.通常是由处理超时发出的.
TERM(15) 结束.通常是当系统关机时发出的.
下面的脚本模拟了一些简单信号的处理:
#!/bin/sh
trap ‘rm -f /tmp/my_tmp_file_$$’ INT
echo creating file /tmp/my_tmp_file_$$
date > /tmp/my_tmp_file_$$
echo “press interrupt (CTRL-C) to interrupt ....”
while [ -f /tmp/my_tmp_file_$$ ]; do
    echo File exists
    sleep 1
done
echo The file no longer exists
trap INT
echo creating file /tmp/my_tmp_file_$$
date > /tmp/my_tmp_file_$$
echo “press interrupt (control-C) to interrupt ....”
while [ -f /tmp/my_tmp_file_$$ ]; do
    echo File exists
    sleep 1
done
echo we never get here
exit 0
如果我们运行这个命令,我们在每一个循环中按下Ctrl+C,我们就会得到下面的输出:
creating file /tmp/my_tmp_file_141
press interrupt (CTRL-C) to interrupt ....
File exists
File exists
File exists
File exists
The file no longer exists
creating file /tmp/my_tmp_file_141
press interrupt (CTRL-C) to interrupt ....
File exists
File exists
File exists
File exists
工作原理:
这个脚本使用trap命令来为命令rm -f /tmp/my_tmp_file_$$执行时接收到INT信号时安排将会执行的动作.然后这个脚本会进入一个循环直到文件存在.当用户按下Ctrl+C时,语句rm -f /tmp/my_tmp_file_$$被执行,然后这个循环会重新开始.因为这个文件已经被删除了,所以第一个while循环会正常的结束.
这个脚本然后会再一次使用trap命令,这一次是要指定当INT信号发生时没有命令被执行.他会重新创建这个文件并进入第二个循环语句.如果用户在这时按下Ctrl+C时,没有配置要执行的语句,所以会发生默认的动作,即立即终止脚本.因为这个脚本是立即被终止的,所以最后的echo和exit命令并不会执行.
unset
unset命令会从当前的环境中移除变量或是函数.但是对于Shell自己定义的只读的变量(例如IFS)不可以进行这样的操作.这个命令并不是经常使用.
例如下面的这个例子:
#!/bin/sh
foo=”Hello World”
echo $foo
unset foo
echo $foo
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shell编程(四)---Shell内建命令简介 的相关文章

  • linux下如何获取昨天和前天?

    我想在变量中获取 sysdate 1 和 sysdate 2 并回显它 我正在使用下面的查询 它将今天的日期作为输出 bin bash tm date Y d m echo tm 如何获取昨天和前天的日期 这是另一种方法 对于昨天来说 da
  • 在 shell 脚本中查找和替换

    是否可以使用 shell 在文件中搜索然后替换值 当我安装服务时 我希望能够在配置文件中搜索变量 然后在该值中替换 插入我自己的设置 当然 您可以使用 sed 或 awk 来完成此操作 sed 示例 sed i s Andrew James
  • 用 C 更快地读取文件

    嗯 我想知道是否有一种比使用 fscanf 更快地读取文件的方法 例如假设我有这个文本 4 55 k 52 o 24 l 523 i 首先 我想读取第一个数字 它给出了接下来的行数 令这个数称为N N 之后 我想读取 N 行 其中有一个整数
  • 如何在 Windows 7 中使用 Python 廉价地创建非常大的文件? [复制]

    这个问题在这里已经有答案了 可能的重复 在Windows系统上快速创建大文件 https stackoverflow com questions 982659 quickly create large file on a windows s
  • 如何在 Android '/data/data/pkg/files' 目录中创建文件层次结构?

    我尝试在 Android 的 data data pkg files 目录中创建 foo bar txt 这似乎是文档中的矛盾 要写入文件 请使用名称和路径调用 Context openFileOutput http developer a
  • PHP上传问题

    我使用了一些脚本来开始在我的开发计算机上上传文件 问题是 尽管此操作预期很容易 但每当我尝试上传图像时 Apache 似乎都会超时 上传设置为On和tmp目录设置在php ini 我尝试上传主要内容gif来自谷歌 一个8 36KB图像 它应
  • 在 C# 中打开文本文件

    我正在编写一个 Windows 窗体应用程序 其中在程序运行时记录一些数据 并使用以下代码将其写入临时文件中 string path Path GetTempFileName byte text new UTF8Encoding true
  • Linux shell 脚本:十六进制数字到二进制字符串

    我正在 shell 脚本中寻找一些简单的方法来将十六进制数字转换为 0 和 1 字符的序列 Example 5F gt 01011111 是否有任何命令或简单的方法来完成它 或者我应该为其编写一些开关 echo ibase 16 obase
  • 如何通过 shell 脚本确定网页是否存在?

    我正在尝试制作一个程序 可以将一系列漫画扫描转换为一个 pdf 文件 并且我不想尝试下载图片来确定我是否有正确的网址 是否有一个 shell 脚本命令可以用来检查网页是否存在 在 NIX 下 您可以使用curl发出一个简单的HEAD要求 H
  • 从文件中读取未知长度的int数组

    如何从文件中读取未知长度的整数数组 我没有找到获取数组大小的方法 所以我尝试了一些临时字符串的东西 但我的代码爆炸了 有更好的想法吗 Use std vector std ifstream inFile fileName std vecto
  • Bash 方法的返回值总是模 256

    我有一个 bash 脚本方法 它返回输入值 然而 返回值始终是模 256 的值 我用 google 搜索了一段时间 发现this http www tldp org LDP abs html exitcodes html文章说它总是以 25
  • 如何将 bash 脚本的整个输出保存到文件

    我正在尝试将 bash 脚本的整个输出保存到文件中 我目前在代码开头有一个参数 ip 地址 如下所示 bin bash USAGE Usage 0
  • Bash 脚本大小限制?

    我有一个 bash 脚本 在 RHEL 或 OS X 上运行时出现以下错误 第 62484 行 意外标记 换行符 附近出现语法错误 第 62484 行 o gz 这是一个自动生成的脚本 用于解决我公司使用的 Grid Engine 计算集群
  • 在 Fish Shell 中设置导出

    我安装了多个版本的 PHP 对于我的正常开发 我总是使用通过自制程序安装的 PHP 5 5 x 在鱼壳里 which php php version gt usr local bin php gt PHP 5 5 8 cli built J
  • 给出 5 个参数,但在终端中只得到 3 个参数

    我想将一个文件传递给一个c 程序 如果我在 IDE 中执行此操作 test string string lt test txt return argc 5 但在终端上我刚刚得到argc 3 看来 这是因为 什么是 lt 意思是 我正在使用
  • 如何使用我在 github 中发布的 bash 脚本执行 chsh?

    我有一个要点 我总是用它来在新服务器上安装我需要的软件包 http gist github com 4372049 http gist github com 4372049 我需要做的就是通过 ssh 在新服务器中输入以下内容 bash c
  • 从文本文件 PHP 读取数据

    我只是想知道如何在 php 中读取文本文件 我想让它显示文本文件中的最后 200 个条目 每个条目都在一个新行上 Like John White Jane Does John Does Someones Name 等等 Thanks Use
  • 将ADODB二进制流转换为字符串vba

    我有以下问题 我有一个存储在服务器上的 CSV 文件 但它有 3 个字符作为分隔符 我想从 URL 加载数据并使用 作为分隔符将数据填充到 Excel 页面的列中 到目前为止 我找到了使用 ADODB 记录集从网站加载文件的代码 但我无法进
  • Mongodb shell mongo:通常只允许每个套接字地址(协议/网络地址/端口)使用一次。对于套接字:0.0.0.0:27017

    前两天还好好的 现在mongod不起作用 甚至echo ps A grep mongo没有打印任何内容 但它警告错误 每个套接字地址只有一种用途 怎么杀掉它 我也尝试过不同的随机端口 他们怎么可能也失败呢 D mongodb win32 x
  • 使用 posix shell 测试字符串中的正则表达式

    如何测试字符串是否与特定字符串匹配正则表达式与基本 无 bash 或任何其他 posix shell 脚本 在 if 语句中 您可以使用expr在 POSIX shell 中计算正则表达式的命令 s Abc expr s alpha 3 e

随机推荐

  • 计算图像帧的平均灰度值

    2016 7 15 在处理视频中 需要对视频流中的图像帧进行区分 分离出其中的亮暗帧图像 区分亮暗图像 是依据图像的平均灰度值来实现的 我们知道 对于一幅灰度图像 每个像素点的灰度值可以通过指针来访问 i j 处的灰度值 img gt im
  • 运行项目出现java.lang.ClassNotFoundException: org.springframework.web.util.IntrospectorCleanupListener

    java lang ClassNotFoundException org springframework web util IntrospectorCleanupListener at org apache catalina loader
  • spyder 出现ValueError: PyCapsule_GetPointer called with incorrect name

    我太难了 经过一堆试验 终于出了坑 总的来说 1 卸载pyqt5 命令 pip uninstall pyqt5 2 重新安装低版本的pyqt5 命令 pip install PyQt5 5 10 1 如果出现pip vendor urlli
  • meta-compilation

    RPython GraalVM 转载于 https my oschina net crcc blog 2239743
  • k8s的pv和pvc创建

    NFS使用PV和PVC 1 配置nfs存储 2 定义PV 实现 下图的pv和pvc测试 pv的定义 这里定义5个PV 并且定义挂载的路径以及访问模式 还有PV划分的大小 vim pv yaml apiVersion v1 kind Pers
  • Pytorch实战笔记(1)——BiLSTM 实现情感分析

    本文展示的是使用 Pytorch 构建一个 BiLSTM 来实现情感分析 本文的架构是第一章详细介绍 BiLSTM 第二章粗略介绍 BiLSTM 就是说如果你想快速上手可以跳过第一章 第三章是核心代码部分 目录 1 BiLSTM的详细介绍
  • JDK11.0.7下载及安装详细教程,步骤解释(win10)

    0 背景知识 JRE Java Runtime Environment JDK Java Development Kit JRE顾名思义是java运行时环境 包含了java虚拟机 java基础类库 是使用java语言编写的程序运行所需要的软
  • HW娱乐板块-你们都是天才~

    接下几天会是各类系统升级改造的时机了 大家都很有想法 就你tm叫韩毅啊 今年你是HW最出名的人物 虽然我不知道他在干什么 但是闸机已经被打穿了 从小我就想当一个百万富翁 我每天加班 可我的梦想却离我越来越遥远 我来到了护网为了实现我的梦想
  • 家里的wifi服务器无响应,宽带wifi服务器无响应

    宽带wifi服务器无响应 内容精选 换一换 当您调用API时 如果遇到 APIGW 开头的错误码 请参见API网关错误码进行处理 正常返回值说明200 OKGET和PUT操作正常返回 201 CreatedPOST操作正常返回 202 Ac
  • 如何用IDaaS云身份认证落地“零信任”安全架构

    题记 2020的RSAC Zero trust 零信任 去年有39家公司打 Zero trust 标签 今年数量激增到91家 可以说零信任理念已被国外同行广泛接受 零信任不仅仅是技术 更是理念的转变 会成为未来十年主流的网络安全架构 为什么
  • 记一次在Tweak中引入Swift framework的过程

    最近想在一个插件里打通App和web端 实现通过web控制App 方案是选用socket io作为服务端和web前端 iOS端socket io是一个纯swift实现的库 目前Theos对swift的支持还不是很完善 但是可以完成一般的工作
  • 大学生团体天梯赛(第八届)

    题目地址 天梯赛 include
  • 浅谈算法和数据结构: 十 平衡查找树之B树

    前面讲解了平衡查找树中的2 3树以及其实现红黑树 2 3树种 一个节点最多有2个key 而红黑树则使用染色的方式来标识这两个key 维基百科对B树的定义为 在计算机科学中 B树 B tree 是一种树状数据结构 它能够存储数据 对其进行排序
  • 复习 OpenGL 纹理映射 总结

    今天系统的复习了一下OpenGL纹理映射 主要参考资料是这两个 OpenGL 教程 http www opengl tutorial org beginners tutorials tutorial 5 a textured cube ht
  • git的简单命令操作,即怎么从github上下载代码到本地

    先到git官网下载自己电脑对应版本的git https git scm com 安装完成后在桌面右键 然后就可以在这里输入命令了 跟linux窗口即命令差不多 接下来就是简单的命令介绍 1 git version 查看当前git安装成功没有
  • 嵌入式期末复习(四)简答题

    1 ARM公司全称是什么 商业模式是什么 列举ST公司常用的ARM内核单片机型号 1 全称 Advanced RISC Machines 2 商业模式 为产品做设计 知识产权付费 3 stm32f101c8t6 stm32f103rct6
  • cgic: CGI的C函数库

    下载回源码包以后 就3个文件 cgic c 函数库capture c 一个很简单的CGI例子 仅仅输出两行提示文字cgictest c 一个演示读取form表单数据的CGI例子 首先在vc6里创建一个空的win32静态库cgic 然后添加c
  • JPG&PNG图片压缩java实现

    最近项目中有一个需求是关于图片处理的 其实关于图片处理java的BufferedImage类基本上已经可以处理绝大多数需求 但是关于png图片的压缩遇到一点小的阻碍 我们知道png图片与JPG图片最大的区别就是可以保存为透明背景的图片 JP
  • 【软件开发】服务端高并发分布式架构演进之路

    服务端高并发分布式架构演进之路 本文以淘宝作为例子 介绍从一百个到千万级并发情况下服务端的架构的演进过程 同时列举出每个演进阶段会遇到的相关技术 让大家对架构的演进有一个整体的认知 文章最后汇总了一些架构设计的原则 在介绍架构之前 为了避免
  • Shell编程(四)---Shell内建命令简介

    命令 我们从一个Shell脚本的内部执行两种类型的命令 也就是通常 normal 的命令 这样的命令我们也可以在命令行的方式下来运行 称为处部命令 另一种就是我们前面所说的内建 built in 命令 称之为内部命令 内建命令是在Shell