参考http://c.biancheng.net/view/706.html

Shell变量:Shell变量的定义、赋值和删除

Shell 支持以下三种定义变量的方式:

variable=value
variable='value'
variable="value"

使用变量

使用一个定义过的变量,只要在变量名前面加美元符号$即可,如:

  1. author="严长生"
  2. echo $author
  3. echo ${author}

变量名外面的花括号{ }是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:

  1. skill="Java"
  2. echo "I am good at ${skill}Script"

Shell命令替换:将命令的输出结果赋值给变量

其中,variable 是变量名,commands 是要执行的命令。commands 可以只有一个命令,也可以有多个命令,多个命令之间以分号;分隔。

例如,date 命令用来获得当前的系统时间,使用命令替换可以将它的结果赋值给一个变量。

  1. #!/bin/bash
  2. begin_time=`date` #开始时间,使用``替换
  3. sleep 20s #休眠20秒
  4. finish_time=$(date) #结束时间,使用$()替换
  5. echo "Begin time: $begin_time"
  6. echo "Finish time: $finish_time"

运行脚本,20 秒后可以看到输出结果:
Begin time: 2019年 04月 19日 星期五 09:59:58 CST
Finish time: 2019年 04月 19日 星期五 10:00:18 CST

Shell位置参数(命令行参数)

1) 给脚本文件传递位置参数

请编写下面的代码,并命名为 test.sh:

  1. #!/bin/bash
  2. echo "Language: $1"
  3. echo "URL: $2"

运行 test.sh,并附带参数:

[mozhiyan@localhost ~]$ cd demo
[mozhiyan@localhost demo]$ . ./test.sh Shell http://c.biancheng.net/shell/
Language: Shell
URL: http://c.biancheng.net/shell/

其中Shell是第一个位置参数,http://c.biancheng.net/shell/是第二个位置参数,两者之间以空格分隔。

2) 给函数传递位置参数

请编写下面的代码,并命名为 test.sh:

  1. #!/bin/bash
  2. #定义函数
  3. function func(){
  4. echo "Language: $1"
  5. echo "URL: $2"
  6. }
  7. #调用函数
  8. func C++ http://c.biancheng.net/cplus/

运行 test.sh:

[mozhiyan@localhost ~]$ cd demo
[mozhiyan@localhost demo]$ . ./test.sh
Language: C++
URL: http://c.biancheng.net/cplus/

Shell特殊变量:Shell $#、$*、$@、$?、$$

Shell 特殊变量及其含义
变量 含义
$0 当前脚本的文件名。
$n(n≥1) 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1,第二个参数是 $2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。当被双引号" "包含时,$@ 与 $* 稍有不同,我们将在《Shell $*和$@的区别》一节中详细讲解。
$? 上个命令的退出状态,或函数的返回值,我们将在《Shell $?》一节中详细讲解。
$$ 当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。

下面我们通过两个例子来演示。

1) 给脚本文件传递参数

编写下面的代码,并保存为 test.sh:

  1. #!/bin/bash
  2. echo "Process ID: $$"
  3. echo "File Name: $0"
  4. echo "First Parameter : $1"
  5. echo "Second Parameter : $2"
  6. echo "All parameters 1: $@"
  7. echo "All parameters 2: $*"
  8. echo "Total: $#"

运行 test.sh,并附带参数:

[mozhiyan@localhost demo]$ . ./test.sh Shell Linux
Process ID: 5943
File Name: bash
First Parameter : Shell
Second Parameter : Linux
All parameters 1: Shell Linux
All parameters 2: Shell Linux
Total: 2

2) 给函数传递参数

编写下面的代码,并保存为 test.sh:

  1. #!/bin/bash
  2. #定义函数
  3. function func(){
  4. echo "Language: $1"
  5. echo "URL: $2"
  6. echo "First Parameter : $1"
  7. echo "Second Parameter : $2"
  8. echo "All parameters 1: $@"
  9. echo "All parameters 2: $*"
  10. echo "Total: $#"
  11. }
  12. #调用函数
  13. func Java http://c.biancheng.net/java/

运行结果为:
Language: Java
URL: http://c.biancheng.net/java/
First Parameter : Java
Second Parameter : http://c.biancheng.net/java/
All parameters 1: Java http://c.biancheng.net/java/
All parameters 2: Java http://c.biancheng.net/java/
Total: 2

Shell字符串详解

字符串举例:

  1. str1=c.biancheng.net
  2. str2="shell script"
  3. str3='C语言中文网'

下面我们说一下三种形式的区别:

1) 由单引号' '包围的字符串:

  • 任何字符都会原样输出,在其中使用变量是无效的。
  • 字符串中不能出现单引号,即使对单引号进行转义也不行。

2) 由双引号" "包围的字符串:

  • 如果其中包含了某个变量,那么该变量会被解析(得到该变量的值),而不是原样输出。
  • 字符串中可以出现双引号,只要它被转义了就行。

3) 不被引号包围的字符串

  • 不被引号包围的字符串中出现变量时也会被解析,这一点和双引号" "包围的字符串一样。
  • 字符串中不能出现空格,否则空格后边的字符串会作为其他变量或者命令解析。

我们通过代码来演示一下三种形式的区别:

  1. #!/bin/bash
  2. n=74
  3. str1=c.biancheng.net$n str2="shell \"script\" $n"
  4. str3='C语言中文网 $n'
  5. echo $str1
  6. echo $str2
  7. echo $str3

运行结果:

c.biancheng.net74
shell "script" 74
C语言中文网 $n

获取字符串长度

在 Shell 中获取字符串长度很简单,具体方法如下:

${#string_name}

string_name 表示字符串名字。

下面是具体的演示:

  1. #!/bin/bash
  2. str="http://c.biancheng.net/shell/"
  3. echo ${#str}

运行结果:
29

Shell字符串拼接(连接、合并)

  1. #!/bin/bash
  2. name="Shell"
  3. url="http://c.biancheng.net/shell/"
  4. str1=$name$url #中间不能有空格
  5. str2="$name $url" #如果被双引号包围,那么中间可以有空格
  6. str3=$name": "$url #中间可以出现别的字符串
  7. str4="$name: $url" #这样写也可以
  8. str5="${name}Script: ${url}index.html" #这个时候需要给变量名加上大括号
  9. echo $str1
  10. echo $str2
  11. echo $str3
  12. echo $str4
  13. echo $str5

运行结果:
Shellhttp://c.biancheng.net/shell/
Shell http://c.biancheng.net/shell/
Shell: http://c.biancheng.net/shell/
Shell: http://c.biancheng.net/shell/
ShellScript: http://c.biancheng.net/shell/index.html

Shell字符串截取(非常详细)

1) 从字符串左边开始计数

如果想从字符串的左边开始计数,那么截取字符串的具体格式如下:

${string: start :length}

其中,string 是要截取的字符串,start 是起始位置(从左边开始,从 0 开始计数),length 是要截取的长度(省略的话表示直到字符串的末尾)。

例如:

  1. url="c.biancheng.net"
  2. echo ${url: 2: 9}

结果为biancheng

2) 从右边开始计数

如果想从字符串的右边开始计数,那么截取字符串的具体格式如下:

${string: 0-start :length}

同第 1) 种格式相比,第 2) 种格式仅仅多了0-,这是固定的写法,专门用来表示从字符串右边开始计数。

这里需要强调两点:

  • 从左边开始计数时,起始数字是 0(这符合程序员思维);从右边开始计数时,起始数字是 1(这符合常人思维)。计数方向不同,起始数字也不同。
  • 不管从哪边开始计数,截取方向都是从左到右。

例如:

  1. url="c.biancheng.net"
  2. echo ${url: 0-13: 9}

结果为biancheng。从右边数,b是第 13 个字符。

再如:

  1. url="c.biancheng.net"
  2. echo ${url: 0-13} #省略 length,直接截取到字符串末尾

结果为biancheng.net

从指定字符(子字符串)开始截取

这种截取方式无法指定字符串长度,只能从指定字符(子字符串)截取到字符串末尾。Shell 可以截取指定字符(子字符串)右边的所有字符,也可以截取左边的所有字符。

1) 使用 # 号截取右边字符

使用#号可以截取指定字符(或者子字符串)右边的所有字符,具体格式如下:

${string#*chars}

汇总

最后,我们对以上 8 种格式做一个汇总,请看下表:

格式 说明
${string: start :length} 从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。
${string: start} 从 string 字符串的左边第 start 个字符开始截取,直到最后。
${string: 0-start :length} 从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。
${string: 0-start} 从 string 字符串的右边第 start 个字符开始截取,直到最后。
${string#*chars} 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。
${string##*chars} 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。
${string%*chars} 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。
${string%%*chars} 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。

Shell数组:Shell数组定义以及获取数组元素

Shell 数组的定义

在 Shell 中,用括号( )来表示数组,数组元素之间用空格来分隔。由此,定义数组的一般形式为:

array_name=(ele1  ele2  ele3 ... elen)

注意,赋值号=两边不能有空格,必须紧挨着数组名和数组元素。

下面是一个定义数组的实例:

  1. nums=(29 100 13 8 91 44)

Shell 是弱类型的,它并不要求所有数组元素的类型必须相同,例如:

  1. arr=(20 56 "http://c.biancheng.net/shell/")

第三个元素就是一个“异类”,前面两个元素都是整数,而第三个元素是字符串。

Shell 数组的长度不是固定的,定义之后还可以增加元素。例如,对于上面的 nums 数组,它的长度是 6,使用下面的代码会在最后增加一个元素,使其长度扩展到 7:

  1. nums[6]=88

此外,你也无需逐个元素地给数组赋值,下面的代码就是只给特定元素赋值:

  1. ages=([3]=24 [5]=19 [10]=12)

以上代码就只给第 3、5、10 个元素赋值,所以数组长度是 3。

获取数组元素

获取数组元素的值,一般使用下面的格式:

${array_name[index]}

其中,array_name 是数组名,index 是下标。例如:

  1. n=${nums[2]}

表示获取 nums 数组的第二个元素,然后赋值给变量 n。再如:

  1. echo ${nums[3]}

表示输出 nums 数组的第 3 个元素。

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

  1. ${nums[*]}
  2. ${nums[@]}

两者都可以得到 nums 数组的所有元素。

完整的演示:

  1. #!/bin/bash
  2. nums=(29 100 13 8 91 44)
  3. echo ${nums[@]} #输出所有数组元素
  4. nums[10]=66 #给第10个元素赋值(此时会增加数组长度)
  5. echo ${nums[*]} #输出所有数组元素
  6. echo ${nums[4]} #输出第4个元素

运行结果:
29 100 13 8 91 44
29 100 13 8 91 44 66
91

Shell获取数组长度

实例演示

下面我们通过实际代码来演示一下如何获取数组长度。

  1. #!/bin/bash
  2. nums=(29 100 13)
  3. echo ${#nums[*]}
  4. #向数组中添加元素
  5. nums[10]="http://c.biancheng.net/shell/"
  6. echo ${#nums[@]}
  7. echo ${#nums[10]}
  8. #删除数组元素
  9. unset nums[1]
  10. echo ${#nums[*]}

运行结果:
3
4
29
3

Shell数组拼接,Shell数组合并

下面是完整的演示代码:

  1. #!/bin/bash
  2. array1=(23 56)
  3. array2=(99 "http://c.biancheng.net/shell/")
  4. array_new=(${array1[@]} ${array2[*]})
  5. echo ${array_new[@]} #也可以写作 ${array_new[*]}

运行结果:
23 56 99 http://c.biancheng.net/shell/

Shell删除数组元素(也可以删除整个数组)

下面我们通过具体的代码来演示:

  1. #!/bin/bash
  2. arr=(23 56 99 "http://c.biancheng.net/shell/")
  3. unset arr[1]
  4. echo ${arr[@]}
  5. unset arr
  6. echo ${arr[*]}

运行结果:

23 99 http://c.biancheng.net/shell/

Shell echo命令:输出字符串

#!/bin/bash

name="Shell教程"
url="http://c.biancheng.net/shell/" echo "读者,你好!" #直接输出字符串
echo $url #输出变量
echo "${name}的网址是:${url}" #双引号包围的字符串中可以解析变量
echo '${name}的网址是:${url}' #单引号包围的字符串中不能解析变量

读者,你好!
http://c.biancheng.net/shell/
Shell教程的网址是:http://c.biancheng.net/shell/
${name}的网址是:${url}

Shell read命令:读取从键盘输入的数据

Shell read 命令支持的选项
选项 说明
-a array 把读取的数据赋值给数组 array,从下标 0 开始。
-d delimiter 用字符串 delimiter 指定读取结束的位置,而不是一个换行符(读取到的数据不包括 delimiter)。
-e 在获取用户输入的时候,对功能键进行编码转换,不会直接显式功能键对应的字符。
-n num 读取 num 个字符,而不是整行字符。
-p prompt 显示提示信息,提示内容为 prompt。
-r 原样读取(Raw mode),不把反斜杠字符解释为转义字符。
-s 静默模式(Silent mode),不会在屏幕上显示输入的字符。当输入密码和其它确认信息的时候,这是很有必要的。
-t seconds 设置超时时间,单位为秒。如果用户没有在指定时间内输入完成,那么 read 将会返回一个非 0 的退出状态,表示读取失败。
-u fd 使用文件描述符 fd 作为输入源,而不是标准输入,类似于重定向。

【实例1】使用 read 命令给多个变量赋值。

  1. #!/bin/bash
  2. read -p "Enter some information > " name url age
  3. echo "网站名字:$name"
  4. echo "网址:$url"
  5. echo "年龄:$age"

运行结果:
Enter some information > C语言中文网 http://c.biancheng.net 7
网站名字:C语言中文网
网址:http://c.biancheng.net
年龄:7

Shell数学计算(算术运算,加减乘除运算)

下面我们先来看一个反面的例子:

[c.biancheng.net]$ echo 2+8
2+8
[c.biancheng.net]$ a=23
[c.biancheng.net]$ b=$a+55
[c.biancheng.net]$ echo $b
23+55
[c.biancheng.net]$ b=90
[c.biancheng.net]$ c=$a+$b
[c.biancheng.net]$ echo $c
23+90

Shell (()):对整数进行数学运算

Shell (( )) 实例演示

【实例1】利用 (( )) 进行简单的数值计算。

[c.biancheng.net]$ echo $((1+1))
2
[c.biancheng.net]$ echo $((6-3))
3
[c.biancheng.net]$ i=5
[c.biancheng.net]$ ((i=i*2)) #可以简写为 ((i*=2))。
[c.biancheng.net]$ echo $i #使用 echo 输出变量结果时要加 $。
10

Shell if else语句(详解版)

下面的例子使用 if 语句来比较两个数字的大小:

  1. #!/bin/bash
  2. read a
  3. read b
  4. if (( $a == $b ))
  5. then
  6. echo "a和b相等"
  7. fi

运行结果:
84
84
a和b相等

Shell case in语句详解

#!/bin/bash

printf "Input a character: "
read -n 1 char case $char in
[a-zA-Z])
printf "\nletter\n"
;;
[0-9])
printf "\nDigit\n"
;;
[0-9])
printf "\nDigit\n"
;;
[,.?!])
printf "\nPunctuation\n"
;;
*)
printf "\nerror\n"
esac
运行结果1:
Input integer number: S
letter

运行结果2:
Input integer number: ,
Punctuation

Shell while循环详解

while 循环举例

【实例1】计算从 1 加到 100 的和。

  1. #!/bin/bash
  2. i=1
  3. sum=0
  4. while ((i <= 100))
  5. do
  6. ((sum += i))
  7. ((i++))
  8. done
  9. echo "The sum is: $sum"

运行结果:
The sum is: 5050 

Shell for循环和for int循环详解

计算从 1 加到 100 的和。

  1. #!/bin/bash
  2. sum=0
  3. for ((i=1; i<=100; i++))
  4. do
  5. ((sum += i))
  6. done
  7. echo "The sum is: $sum"

运行结果:
The sum is: 5050

Shell break和continue跳出循环详解

Shell函数详解(函数定义、函数调用)

实例演示

定义一个函数,计算所有参数的和:

  1. #!/bin/bash
  2. function getsum(){
  3. local sum=0
  4. for n in $@
  5. do
  6. ((sum+=n))
  7. done
  8. return $sum
  9. }
  10. getsum 10 20 55 15 #调用函数并传递参数
  11. echo $?

运行结果:
100

Shell函数参数

实例1】使用 $n 来接收函数参数。

  1. #!/bin/bash
  2. #定义函数
  3. function show(){
  4. echo "Tutorial: $1"
  5. echo "URL: $2"
  6. echo "Author: "$3
  7. echo "Total $# parameters"
  8. }
  9. #调用函数
  10. show C# http://c.biancheng.net/csharp/ Tom

运行结果:
Tutorial: C#
URL: http://c.biancheng.net/csharp/
Author: Tom
Total 3 parameters

Linux Shell重定向(输入输出重定向)精讲

Linux Shell 输出重定向

输出重定向是指命令的结果不再输出到显示器上,而是输出到其它地方,一般是文件中。这样做的最大好处就是把命令的结果保存起来,当我们需要的时候可以随时查询。Bash 支持的输出重定向符号如下表所示。

表2:Bash 支持的输出重定向符号
类 型 符 号 作 用
标准输出重定向 command >file 以覆盖的方式,把 command 的正确输出结果输出到 file 文件中。
command >>file 以追加的方式,把 command 的正确输出结果输出到 file 文件中。
标准错误输出重定向 command 2>file 以覆盖的方式,把 command 的错误信息输出到 file 文件中。
command 2>>file 以追加的方式,把 command 的错误信息输出到 file 文件中。
正确输出和错误信息同时保存 command >file 2>&1 以覆盖的方式,把正确输出和错误信息同时保存到同一个文件(file)中。
command >>file 2>&1 以追加的方式,把正确输出和错误信息同时保存到同一个文件(file)中。
command >file1 2>file2 以覆盖的方式,把正确的输出结果输出到 file1 文件中,把错误信息输出到 file2 文件中。
command >>file1  2>>file2 以追加的方式,把正确的输出结果输出到 file1 文件中,把错误信息输出到 file2 文件中。
command >file 2>file 不推荐】这两种写法会导致 file 被打开两次,引起资源竞争,所以 stdout 和 stderr 会互相覆盖,我们将在《结合Linux文件描述符谈重定向,彻底理解重定向的本质》一节中深入剖析。
command >>file 2>>file

在输出重定向中,>代表的是覆盖,>>代表的是追加。

输出重定向举例

【实例1】将 echo 命令的输出结果以追加的方式写入到 demo.txt 文件中。

  1. #!/bin/bash
  2. for str in "C语言中文网" "http://c.biancheng.net/" "成立7年了" "日IP数万"
  3. do
  4. echo $str >>demo.txt #将输入结果以追加的方式重定向到文件
  5. done

运行以上脚本,使用cat demo.txt查看文件内容,显示如下:
C语言中文网
http://c.biancheng.net/
成立7年了
日IP数万

Shell过滤器

常用的被作为过滤器使用的命令如下所示:

命令 说明
awk 用于文本处理的解释性程序设计语言,通常被作为数据提取和报告的工具。
cut 用于将每个输入文件(如果没有指定文件则为标准输入)的每行的指定部分输出到标准输出。
grep 用于搜索一个或多个文件中匹配指定模式的行。
tar 用于归档文件的应用程序。
head 用于读取文件的开头部分(默认是 10 行)。如果没有指定文件,则从标准输入读取。
paste 用于合并文件的行。
sed 用于过滤和转换文本的流编辑器。
sort 用于对文本文件的行进行排序。
split 用于将文件分割成块。
strings 用于打印文件中可打印的字符串。
tac 与 cat 命令的功能相反,用于倒序地显示文件或连接文件。
tail 用于显示文件的结尾部分。
tee 用于从标准输入读取内容并写入到标准输出和文件。
tr 用于转换或删除字符。
uniq 用于报告或忽略重复的行。
wc 用于打印文件中的总行数、单词数或字节数。

接下来,我们通过几个实例来演示一下过滤器的使用。

在管道中使用 awk 命令

关于 awk 命令的具体用法,请大家自行学习,本节我们我们仅通过几个简单的实例来了解一下 awk 命令在管道中的使用。

实例1

查看系统中的所有的账号名称,并按名称的字母顺序排序。

[c.biancheng.net]$ awk -F: '{print $1}' /etc/passwd | sort
adm
apache
avahi

biancheng-linux-shell的更多相关文章

  1. 学习笔记之Linux Shell脚本教程:30分钟玩转Shell脚本编程

    Linux Shell脚本教程:30分钟玩转Shell脚本编程 http://c.biancheng.net/cpp/shell/

  2. 【Linux】Shell三类变量的作用域——linux shell “永久环境变量”、“临时环境变量”和"普通变量"之完全解读

      2015-05-08 00:15 3896人阅读 评论(10) 收藏 举报 本文章已收录于:   分类: 软件开发进阶(419) 作者同类文章X Unix/Linux杂项(118) 作者同类文章X ...

  3. linux shell 中的sleep命令

    开始还以为是这样的语法: sleep(1), 后面发现是: linux shell 中的sleep命令 分类: LINUX 在有的shell(比如linux中的bash)中sleep还支持睡眠(分,小 ...

  4. Linux shell脚本编程(三)

    Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...

  5. Linux shell脚本编程(二)

    Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...

  6. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  7. Linux Shell 流程控制语句

    * 本文主要介绍一些Linux Shell 常用的流程控制语句* 1. if 条件语句:if-then/if-elif-fi/if- else-fi if [条件判断逻辑1];then command ...

  8. Linux Shell 截取字符串

    Linux Shell 截取字符串 shell中截取字符串的方法很多 ${var#*/} ${var##*/} ${var%/*} ${var%%/*} ${var:start:len} ${var: ...

  9. Linux Shell 重定向与管道【转帖】

    by 程默 在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以 ...

  10. Linux Shell 通配符、元字符、转义符【转帖】

    作者:程默 说到shell通配符(wildcard),大家在使用时候会经常用到.下面是一个实例: 1   1 2 3 4 [chengmo@localhost ~/shell]$ ls a.txt  ...

随机推荐

  1. 14-8 C++函数调用运算符

    目录 14.8.0 引入 函数对象 含有状态的函数对象 函数对象常做泛型算法实参 14.8.1 lambda是函数对象 表示没有捕获值的lambda的类 表示lambda及其捕获行为的类 14.8.2 ...

  2. Redis学习笔记整理

    一.Redis概述 1.redis简介 Redis(REmote DIctionary Server 远程字典服务器)是一款开源的,用ANSI C编写.支持网络.基于内存.亦可持久化的日志型.Key- ...

  3. centos7-arm架构yum源(armhf) yum源(中国科学技术大学)

    # CentOS-Base.repo # # The mirror system uses the connecting IP address of the client and the # upda ...

  4. 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现七

    一.前言介绍: 1.1 项目摘要 随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势.古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力.然而,在现代社会中 ...

  5. .NET 创建动态方法方案及 Natasha V9

    前言 本篇文章前面客观评估了 .NET 创建动态方方案多个方面的优劣,后半部分是 Natasha V9 的新版特性. .NET 中创建动态方法的方案 创建动态方法的不同选择 以下陈列了几种创建动态方法 ...

  6. 十、Spring Boot集成Spring Security之HTTP请求授权

    目录 前言 一.HTTP请求授权工作原理 二.HTTP请求授权配置 1.添加用户权限 2.配置ExceptionTranslationFilter自定义异常处理器 3.HTTP请求授权配置 三.测试接 ...

  7. synchronized 关键字测试

    对象上有关键字 package com.study.juc.sync; import java.util.concurrent.TimeUnit; public class Test1 { publi ...

  8. 生成式AI如何辅助医药行业智能营销

    生成式AI如何辅助医药行业智能营销 生成式AI在医药行业的智能营销中发挥着日益重要的作用,它通过多种方式辅助医药企业提升市场洞察能力.优化营销策略.增强客户互动和体验,从而推动销售增长和品牌价值的提升 ...

  9. Mac m1 安装 Homebrew

    Homebrew 是 Mac 的包管理器,类似于 Linux 中的 apt,Windows 中的 choco. 自从 M1 芯片发布,Homebrew 正在积极适配新架构,如今已经有了原生支持 ARM ...

  10. Java根据前端返回的字段名进行查询数据

    在Java后端开发中,我们经常需要根据前端传递的参数(如字段名)来动态查询数据库中的数据.这种需求通常出现在需要实现通用查询功能或者复杂查询接口的场景中.为了实现这个功能,我们需要结合Java的反射机 ...