shell 编程 学习笔记

Spine动画在Unity里卡顿、闪烁、排序错乱?这些性能优化与渲染问题一次讲清 本文深入解析了Spine动画在Unity中常见的卡顿、闪烁和排序错乱问题,提供了全面的性能优化与渲染解决方案。从性能瓶颈诊断到材质合并、动态合批优化,再到层级错乱与Alpha闪烁的处理,帮助开发者提升动画表现和运行效率。特别针对Unity和Spine的协同工作进行了详细的技术探讨。 阅读详情

一、 变量

1, 用的时候可以写为$var或者${var},但当变量后有字母或者其他字符时必须用后者。

2, 用printf打印时变量最好用””,如printf  “%s\n” “$var”

3, 取消变量,var= 或者unset var(先尝试取消变量否则就取消函数,-f代表函数,-v代表变量,如unset –f  fn)

4, 在双引号中,可以替换变量、替换命令执行结果、替换算术运算结果。若在双引号中用\可抑制变量的替换。

5, 变量的作用范围:仅限于当前的shell,但环境变量可以在任何shell环境中有效。在执行sh文件时会另开一个shell环境,从当前环境中继承环境变量。要想在当前shell中运行必须用. cd.sh或者sourec cd.sh。

6, 环境变量:要把一个变量变成环境变量要用export,如export var =”hello”或者export var.

执行export或者export  -p会列出目前的环境变量。declare –x var一样可以设为环境变量。

7, BASH内置的环境变量:

BASH:bash完整的变量名,如/bin/bash 或者 /usr/local/bin/bash

BASH_EVN:执行shell script时若此变量不为空则首先执行它。

BASH_VERSION:bash的版本

CAPATH:cd命令搜索的路径(类似在环境变量中搜索命令)

EVN:以互动模式调用sh或者在POSIX模式下时,首先检查此变量,有则首先执行它

EUID:有效的uid

FCEDITOR:fc命令默认使用的比较器

FIGNORE:在进行文件名自动 补齐时,忽略的扩展名列表。用:隔开,如”.o:~:.txt”

FUNCNAME:函数执行时的函数名(类似于php中的魔术变量__FUNCTION__)

GLOBIGNORE:做样式比较时忽略的文件名列表,用:隔开

GROUPS:数组变量,包含用户所属的组群列表

HISTCMD:当前指令执行完后它在历史指令中的排列编号,

HISTCONTROL:控制指令是否存入历史脚本文件中

          ignorespace:排除开头有空格的指令

          ignoredups:连续重复的指令只存一个

          ignoreboth:结合前两者的功能

HISTFILE:设定历史脚本文件的路径文件名,通常是~/.bash_history

HISTFILESIZE:历史脚本文件存储指令的最大行数,默认500

HISTIGNORE:不存入历史的指令,以:隔开,如ls:ps:cd:t*:\&(&代表最后一个历史指令,若一直健入重复的指令只存入一个,&又是后台执行符号,需要用\转义)

HISTSIZE:在互动模式中shell记住的历史指令数目,默认500

HOME:当前用户的家目录

HOSTFILE:包含自动补齐主机名的数据文件,须和/etc/hosts格式相同

HOSTNAME:主机名称

HOSTTYPE:主机形态,如i386

IFS:定义字段分隔符,默认为:空格、tag字符、换行字符。

IGNOREEOF:在按Ctrl+D时,出现几次EOF才能注销系统。

INPUTRC:设定命令行函数库readline的启动配置文件,可覆盖~/.inputrc

LANG:目前语系的名称

LC_ALL:目前的locale,可覆盖LAND和LC_*的设定

LC_COLLATE:locale字母排序

LC_CTYPE:locale字符分类

LC_MESSAGES:locale信息显示的转换,如

LINENO:script脚本已执行到的行数

MACHTYPE:描述主机型态的GUN格式,如i386-pc-linux-gun

MAIL:邮件文件的名称

MAILCHECK:每隔多久检查一下邮件,默认是60秒

MAILPATH:设定检查新邮件的文件名,多个用:隔开

OLDPATH:前一个工作目录(有点类似于cd  -)

OPTARG:使用getopts处理选项时,取得的选项的参数

OPTERR:若此值为1,当getopts发生错误时,不管选项行第一个字符是否为:,都显示错误信息

OSTYPE:操作系统,如linux-gun

PATH:命令搜索的路径,多个用:隔开

PPID:父进程编号

PROMPT_COMMAND:出现在主要提示符$PS1之前执行的命令

PS1:默认为\s-\v\$   <主要提示符代码见背部>

PS2:次提示符号,默认为>

PS3:select选单的提示符,默认为#?

PS4:追踪程序时各行的提示符样式,默认为+,

PWD:当前的工作目录

RANDOM:产生随机数(需要随机种子)

REPLY:在select和read没有设定读取的变量时,默认的变量名称

SECONDS:目前的shell script已执行的时间(以秒为单位)

SHELL:shell的文件路径,默认为”/bin/bash”

SHELLOPTS:经set –o指令开启的shell选项,以:分隔

SHLVL:子shell的层级数

TIMEFORMAT:设定time统计运行时间的格式《更详细的见背后》

TMOUT:shell脚本执行的超时时限

UID:用户ID

$1~$n:位置参数,传入脚本或者函数的参数,第一个参数是$1,第二个是$2,依次类推,第10个是${10},$0表示执行程序的名称

$*:代表所有位置的参数,为一字符串,如”ABC  123  XYZ”

$@:所有位置的参数组成的串行,如”ABC”、”123”、”XYZ”

$#:位置参数的个数

$?:上一个命令执行结束后的传回值,0代表执行成功,非0代表失败

$$:目前shell  script的进程编号

$!:上一个后台程序的进程编号

$_:1,script执行时为bash的绝对路径,如/bin/bash。2,上一个命令执行时最后一个位置参数。3,检查邮件时,为邮件文件名。

8, 设变量为只读变量

readonly var设定var变量为只读,执行readonly或者readonly –p列出所有的只读变量。

readonly –f 函数名:设定函数只读,不可修改。

readonly –a 数组名:设定数组只读,不可修改。

或者declare –r var设定var只读

9, declare 用法:

选项

说明

-p

显示变量属性  Declare –p var    显示var的属性

-a

变量是一个数组    Declare –a array     设定array为一个数组

-f

搜寻命令时只找函数   Declare –f fn   寻找fn时只在函数列表里找,不搜寻其他别名或者外部命令

-i

变量是一个整数  Declare –I var   设定var为一整数

-F

显示所有的函数名称及其属性     Declare -F

-r

设定变量只读    Declare –r var      Var变量只读

-t

设定变量具有trace属性,有利于排除。declare –t xyz=111

-x

设为环境变量,declare –x mypath

10, 自定义环境

大多数主机在开设帐号后会自动在主目录下建立.bash_profile和.bashrc这两个文件,至于.bash_logout一般默认没有,需要自己建立。一般在.bash_profile中设定全局适用的命令、搜寻路径和环境变量,而其他大部分设定在.bashrc里,所以.bash_profile比较小,而.bashrc比较大。

文件名

执行时机

~/.bash_profile

登录时

~/.bashrc

执行shell  script时

~/.bash_logout

注销时

而系统管理员还要维护另外三个配置文件:

/etc/profile

/etc/bash.bashrc

/etc/skel目录下所有的文件

其中/etc/profile和/etc/bash.bashrc的设定会影响所有的账号使用。在/etc/profile中设定的有umask、PATH、多国语言环境、提示符号、别名等。/etc/bash.bashrc的内容大外如下:[ -f  /etc/profile ] && . /etc/profile 表示当执行交互式的shell时会检查/etc/profile是否存在,若存在就执行。

/etc/skel的作用是:当管理员开设新账号时,这个目录下的所有的文件会拷一份到新账号home目录下,作为用户的环境文件。其中包括 .bash_profile和.bashrc文件。

11,数组:第一个元素由0开始,并且如1+2这样的算术表达式也可以作为索引,${arr[5]}.

建立数组时可以指定个别元素的索引,如arr=([3]=77  [5]=100  55)第4个元素为77,第6个元素为100第7全元素为55.

$(arr[@])一次取出数组的全部元素,得到以空白隔开的全部元素,如77  100  55

$(arr[*])一次取出数组的全部元素,得到一个字符串,如”77  100  55”

$(#arr[@])或者 $(#arr[*])取得数组元素的个数

unset arr取消数组

unset arr[4]取消数组的一个元素

11, Here Document:cat<<’wendao’关闭变量替换功能。cat<<-‘wendao’去掉每行之前的tab字符。:<<wendao批注,什么都不做。

二、 变量扩展${var}、命令替换$(command)及算术扩展$((算术式))

1, 变量存在:变量有值或者其值为空(null),若用unset掉变量,则变量不存在。

${变量-默认值}:若变量存在返回变量值,否则就返回默认值。

${变量:-默认值}:若变量不存在或者为空就传回默认值,否则返回变量值。

${变量:=默认值}:若变量不存在或者为空就给变量设一个默认值,否则就返回变量的值。

${变量:?提示信息}:若变量不存在或者其值为空提示错误信息,并停止执行。

${变量:+真值}:变量存在且其值非空则返回真值,否则返回空值。

:表明同时测试空值,若去掉:表示只测存在性,不测空值。

2, 变量扩展:字符串第一个字符编号为0,依次累加。

${变量:位置起点:长度}:从位置起点开始截取字符串,若没有长度则取以后的全部字符。${@:起点:个数}:截取位置参数,若无个数则取以后所有的参数。

${#变量名称}:返回变量值的字符串长度。

${#数组[@]}:取数组元素个数

${#数组[*]}:取数组元素个数

expr length “字符串”:获取字符串长度

expr “字符串”:”.*”:利用字符串匹配来计算字符串的长度

${变量#样式}:从变量的左边开始比较样式,删除最短符合样式的字符串

${变量##样式}:从变量的左边开始比较样式,删除最长符合样式的字符串

${变量%样式}:从变量的右边开始比较样式,删除最短符合样式的字符串

${变量%%样式}:从变量的右边开始比较样式,删除最长符合样式的字符串

${变量/样式/替换字符串}:只替换第一个对比符合样式的字符串

${变量//样式/替换字符串}:替换全部符合样式的字符串

若替换字符串为空则为删除符合样式的字符串,若样式前加#表示该样式必须出现在变量的开头,若加上%表示该样式必须出现在变量的末尾。

若将变量名换为@或者*表示会把各位置参数轮流对比样式进行替换操作。

${!开头字符串@}或者${!开头字符串*}:列出所有以”开头字符串”开头的变量名称,各变量之间用$IFS定义的第一个分隔符隔开。

${!数组[@]}或者${!数组[*]}:列出数组所有的索引,各索引之间用$IFS的第一个分隔符隔开,若将${!数组[@]}用双引号引起来,返回的值不是一个字符串,而是将各个索引值视为单独的字符串。

3、命令替换:将命令执行后的输出放入变量中,会自动删除换行符,有以下两种写法:

变量名称=$(命令)   【推荐写法】

变量名称=`命令`

在获取命令执行结果的时候会自动删除换行符,可用IFS变量替换换行符。

在命令替换里也可以使用其他的命令替换,如r=$(du –s $(pwd))

3,算术扩展:I=$((4+5))会计算值,否则会当成一个字符串,如I=4+5,实际上I的值为“4+5”字符串。

三、 算术运算:常用的几种方法如下

名称

语法

范例

算术扩展

$((算术式))

R=$((3+5*7))

使用外部程序expr

R=`expr 4+5`

R=`expr 4+5`

使用$[ ]

$[算术式]

R=$[4+5]

使用内置命令declare

Declare  –i 变量=算术式

Declare –I r=4+5

使用内置命令let

Let 算术式

Let r=5+4

1,算术式可包含变量、变量扩展,在进行计算时变量会被替换,变量扩展会被展开。

求值时若算术式中的变量不存在或者空值,则该变量的值为0.

以0开头为八进制,以0x或者0X开头为16进制,不同进制的数字可以”进制#数字”的表示法。

在$((表达式中))如果表达式中的变量,最好不要加$,以免该变量不存在造成语法错误,若表达式中有变量扩展则要加上$,如推荐用$((12+i)),不推荐用$((12+$i))。

常用的算术运算符:

++/--自增和自减、*乘、/除、**乘方、%求余、<<位左移、>>位右移、|位或、&位与。

+=、-=、*=、/=等赋值运算符。

三元运算符:((n<100?45:89))

2、expr作表达式时,如果达表式中含有bash shell的特殊字符,如*、|、<、>、!、&、(、)的话要进行转义,否则会错。

r=`expr 参数1\| 参数2`:若参数1存在、非空、非0则传回参数1的值,否则传回参数2的值。

r=`expr 参数1 \& 参数2`:若参数1和参数2都存在、非空、非0,则返回参数1的值,否则返回0。

r=`expr 4+5`:加法运算。 r=`expr 4-5`:减法运算。r=`expr 4 \* 5`:乘法运算。

r=`expr 4 % 5`:求余运算。 r=`expr 4 / 5`:除法运算。r=`expr $r+1`:递加1。

r=`expr “string”:st`:对比样式st符合的字符数,此处符合2个字符,故r值为2.

r=`expr match “string” st`与上式一样。

r=`expr  index “string”  in`:找出子串在字符串中的位置。此处为3,即in在string中的位置为3.

r=`expr  substr  “string”  2  3`:从第2个字符开始取3个字符的长度。

r=`expr  length “string”`:计算字符串的长度。

r=`expr  + match`:+后接要视为一般字符的关键词或者运算符,如 / 等。

r=`expr 1\< 2`成立并返回1。r=`expr 3 \<= 2`不成立返回0。r=`expr 2=2`成立并返回1。

r=`expr 3 \!= 2`成立并返回1。r=`expr 3\>= 2`成立并返回1.r=`expr 3 \> 2`成立并返回1。

注:expr不支持乘方运算。

3、使用$[ ]做算术运算

r=$[算术式]:r=$[4+-*/%5]4加减乘除求余5.

r=$[2**3]乘方运算。r=$[r+1]递加运算。

4、使用内置命令declare、let做算术运算:在用这两个命令时,运算符和操作数之间不可以有空格,要紧密相连。特殊符号不必转义,如乘法*、乘方**直接就可以用,在算式中可以包含其他变量,变量之前不用加$符号。

declare设定变量后运算就比较直观了,如declare –I x.x=5*7。x=2**3,

let指令也是如此,如let I=6+4;let I=2**3。

使用空格符可增强可读性,但这时要加双引号,如let “I = I + 5”

四、 流程控制语句:用break和continue语句可跳出循环。

1, if判断语法:

if  条件测试1;then

命令区域1

elif 条件测试2;then

    命令区域2

else

    命令区域3

fi

If  条件测试1

Then

命令区域1

Elif 条件测试2

Then

命令区域2

Else

命令区域3

fi

Ø 这里的条件测试可为一条命令,包括管道命令,执行成功则返回真,如if grep –q “str”                         wendao.txt;then 就是查到wendao.txt里是否包含str这个字符串,若成就判真。

Ø 如if ((a<b));then 这里((算术式))是复合命令的内置算式,它等同于let “算式”:if let “a<b”.

其他的如:((0))、((1))、((5*6))、((20<30))、((20&&30))、((10&3))、((2|5))。结果为0就判断为假,非0就判断为真。

Ø 还可以使用[[ 判断式  ]],注意这里的空格,如if [[ str > xyz ]];then

Ø 使用内置命令:test判断式,如if  test  “str”  \>  “xyz”;then

Ø 使用内置命令:[ 判断式 ],与test用法相同,两者可改写,如if [ “str” \>  “xyz”  ];then

Ø 作用-a、-o进行逻辑组合:

[ -r filename1  -a  -x filename1 ]:-a有且之意,filename1可读并且可执行时满足条件。

[ -r filename1  -o  -x filename1 ]:-o有或之意,filename1可读或者可执行时满足条件。

Ø 命令1  &&  命令2:如果命令1执行成功才会执行命令2,如果两个命令都执行成功返回真值,否则就返回假值。

Ø 命令1  ||  命令2:如果命令1执行失败才会执行命令2,如果两者有一个执行成功就返回真,否则返回假值。

注意:[[  ]] 和 ((  ))都不必转义运算符。在[[  ]]中如果使用==或者!=,且在这两个运算符的右方的字符串没有加上单引号或者双引号,则==或者!=会视为想要对比该字符串所形成的”样式”,如果相符返回真值,如 [[  $a == “???”  ]]、[[  $a == ???  ]] 是不一样的。其中 =~ 右边放想要对比的正则表达式样式,[[  $a =~  .{3}  ]] 注意此样式不要加引号。

Ø 有关文件属性的判断:

判断式

含义

-a 文件

若文件存在

-b 文件

若文件存在,且该文件是区域设备文件

-c 文件

若文件存在,且该文件是字符设备文件

-d 文件

若文件存在,且该文件是目录

-e 文件

若文件存在

-f 文件

若文件存在,且该文件是一般文件

-g 文件

若文件存在,且设置了set  group  id属性

-h 文件

若文件存在,且是符号链接文件

-k 文件

若文件存在,且设置了sticky位的属性

-p 文件

若文件存在,且是管道文件

-r 文件

若文件存在,且具有可读的属性

-s 文件

若文件存在,且文件大小大于0

-t 文件描述符

若文件描述符是开启的,且链接了某一个终端

-u 文件

若文件存在,且设置了set user id 属性

-w 文件

若文件存在,且具有可写的属性

-x 文件

若文件存在,且具有可执行的权限

-O 文件

若文件存在,且该文件为有效的用户id所拥有

-G 文件

若文件存在,且该文件为有效的群组id所拥有

-L 文件

若文件存在,且为符号链接文件

-S 文件

若文件存在,且为socket文件

-N 文件

若文件存在,且自从上次读取后被修改过

文件1 –nt 文件2

若文件1比文件2新。或者文件1存在但文件2不存在

文件1 –ot 文件2

若文件1比文件2旧。或者文件2存在但文件1不存在

文件1 –ef 文件2

若文件1和文件2链到相同的设备和inode编号

Ø 有关字符串的判断:变量名上最好加双引号,以免变量内容为空时造成语法错误。

判断式

含意

-z 字符串

若字符串长度为0(空串)

-n 字符串

若字符串长度不为0,即非空串

字符串

若字符串长度不为0

字符串1 == 字符串2 (或者用 = )

若两个字符串相等

字符串1  !=  字符串2

若两个字符串不相等

字符串1  <  字符串2

若串1小于串2

字符串1  >  字符串2

若串1大于串2

Ø 算式的条件判断:参数1  -eq  参数2

-eq:相等。-ne:不相等。-lt:小于。-gt:大于。-le:小于等于。-ge:大于等于。

Ø bash选项判断式:-o set 选项名称:如果该选项是开启的状态。

2、 case条件判断式的结构如下(相当于其他语言中的switch)

Case  待选项  in

      样式串行1)  命令区域1;;

      样式串行2)  命令区域2;;

      样式串行3)  命令区域3;;

      ………….

      *)  命令区域;;

esac

Ø 若样式串行中有好几个字符串要对比,要使用 | 隔开,为或的意思,只要符合其一就算对比成功。

Ø 样式串行可写成 ‘(样式串行)’ 或者写成 ‘样式串行)’,一般写成后面的。

Ø 样式 串行可包括字符串,如jack。通配符:C*匹配以C开头的字符串。字符集合:[p-r]im表示pim、qim、rim三个串。

Ø ?(样式串行):匹配0次或者1次样式串行。

*(样式串行):匹配>=0次样式串行。

+(样式串行):匹配>=1次样式串行。

@(样式串行):符合样式串行中的一个就算对比符合。

!(样式串行):只要不是出现在样式串行中的就算对比符合。

以上这些除可用于case语法外,还可以用在[[  ]]判断中,if [[ $cmd == @(declare|export)  ]];then。

3、 for循环:串行就是用$IFS所定义的分隔符隔开的字符串组合,以下为两种写法:

For  变量  in  串行

Do

     命令区域

done

IFS=’:’

PL=”root:x:0:0:/bin/bash”

for  f  in  $PL

do 

     echo $f

done

For ((初始条件;  终止条件;  异动项))

Do

命令区域

done

Declare  –i i sum

For ((i=1;i<=20;i=i+1))

Do

     Let sum+=i

done

4、 while循环,语法如下:

While  条件测试

Do 

     命令区域

done

While ((i < 10))

Do

Let ++i

done

While  read  line

Do

     Echo $line

Done < cvsfile

IFS=’:’

While  read  f1 f2 f3 f4 f5 f6 f7

Do

Echo “账号:$f1”

Done < “/etc/passwd”

IFS=’:’

Cat  /etc/passwd |{

While  read  f1 f2 f3 f4 f5 f6 f7

Do

     Echo “账号:$f1”

done

}

5、 until循环:与while循环刚好相反,当条件测试值为假的时候才会进入循环。

Until  条件测试

Do 

     命令区域

done

6、 select选择列表:

Select  选项变量  in  串行

Do

      命令区域

done

   select命令用来建立一个选项列表,列表提示符由内置变量$PS3定义,默认是#?,select会给各选项一个编号,由1开始递增,当健入编号选择其中某一选项时,该选项的内容就赋给选项变量,而健入的编号则赋值给REPLY变量中。

五、 函数:函数名  参数1  参数2  参数3……

Function 函数名()

{

}

函数名()

{

}

Function 函数名

{

}

1、 在使用函数前一定要定义函数,否则会报找不到函数的错误。

2、 在函数执行期间,FUNCNAME表示当前执行的函数,最后一条命令的执行状态代表函数的返回值,如果有return则返回,如return  4 返回4。

3、 用unset –f 函数名 取消函数。

4、 函数只在定义的shell中有效,执行时并不开启新的shell环境,若想让定义的函数在子shell中有效,可用内置命令export –f 选项。

5、 如果没有特别指定,在script中定义的变量为全局变量,在整个脚本文件里皆有效,若想定义函数的私有变量,可用local命令,如local var=0,在函数外就访问不了。

6、 当函数借用命令行参数时,原有的位置参数会被保存起来,等函数执行结束后再恢复其值。

7、 各参数变量:$0:script文件本身,$1:第一个参数,$2:第二个参数,….$9:第9个参数,${10}第10个参数,$#:参数的个数,$@:所有以空白隔开的参数,$*:所有的参数组成的字符串。

六、输出转向操作:

1,操作系统默认指定的3个文件代码:0标准输入(stdin)、1标准输出(stdout)、2标准错误(stderr),转向时 < 代表转向输入,若<左方的文件代码省略默认为0即标准输入,> 代表转向输出,若>左方的文件代码省略,默认为1即标准输出。

2,开启文件,fnu<>文件,开启一个文件,指定其文件代码为fnu,如exec  6<>test.txt开启文件test.txt并指定其文件代码为6。

3,关闭文件,fnu<&- 关闭转向输入文件,如 exec  6<&- 关闭文件代码6,fnu>&- 关闭转向输出文件,如exec  5>&- 关闭文件代码5。

4,复制文件代码,有时为了不影响原有文件代码的使用最好先复制一份,等操作结束再还原回去。

n<&m 复制转向输入的文件代码m,存成文件代码n,使n连接至m。

n>&m 复制转向输出的文件代码m,存成文件代码n,使n连接至m。

exec  >&6 将标准输出连接至代码6,凡是原本在标准输出的内容全转存至文件代码6。

cat  <&6  将文件代码6的内容转向至标准输入,并有cat把内容显示出来。

exec  5<&0 复制标准输入存成文件代码5,建立文件代码0的连接,就是做输入的备份,一旦备份好后就可以对标准输入进行操作,如转向输入,操作完后应还原标准输入,如  exec  0<&5  5<&- :还原并关闭连接。

 5,转向输入:

 fnu<文件:wc –l  </etc/error.log此处fnu默认为0即标准输入,将标准输入和error.log建立链接,wc改由error.log读取行数。wc并不知道它是从哪里取得数据,反正wc默认就是从标准输入读取数据。

 exec  6< /etc/error.log 

 wc –l  <&6

使用文件代码6作输入,来源是error.log,由文件代码6供应wc数据行。

6,转向输出:

fnu>文件:使用文件做转向输出,若文件不存在则创建一个新文件,若存在则清空文件。fnu省略的话默认为1.如产生空文件可以用 > test.txt或者:> test.txt

fnu >| 文件:此语法不理会noclobber选项,只要文件存在就强制覆盖并清空该文件。

7,转向附加: fun>>文件,若文件存在,就写在文件后面,不会清空文件。

8,标准错误伴随标准输出做转向:&>文件  或者  >&文件

ntpdate  time.stdtime.gov.cn  &>/dev/null 

使用ntpdate向ntp主机校时,如果执行时产生错误信息,则伴随执行过程产生的信息,转向输出至/dev/null,即屏弃错误信息。

&>的作用和 “ >文件  2>&1”的作用是相同的,意为转向输出至文件,标准错误代码2连接至标准输出1,如上例可写为:ntpdate time.stdtime.gov.cn  > /dev/null  2>&1

9,Here  Document的转向:

exec  6<<wendao

line1

line2

wendao  

避坑指南:Windows11语言包安装后部分界面仍显示中文的终极解决方案 本文详细解析了Windows11语言包安装后部分界面仍显示中文的问题,提供了从基础到进阶的完整解决方案。通过PowerShell命令、注册表清理和系统文件检查等方法,帮助用户彻底解决语言显示不一致的问题,确保系统界面语言统一。 阅读详情

相关推荐

DC/DC开关电源EMC仿真红宝书

本红宝书系统性介绍开关电源EMC仿真方法,包括仿真原理、仿真思路、仿真工具以及仿真效率提升与仿测一致性的实战经验。从理论到仿真,从仿真到应用,真正帮你实现一文掌握开关电源EMC仿真!全文约14000字,适读人群:开关电源设计、电磁兼容EMC相关从业者,电磁相关专业研究生及CST仿真爱好者等。

电磁学社 2502

Shell编程学习笔记1-Shell入门

初识Shell脚本程序---什么是Shell脚本?有什么作用?

2302_76629181的博客 1201

历史预测+LLM双杀!DriveGPT4-V2闭环驾驶配置避坑指南

本文深入探讨了DriveGPT4-V2在工程化部署中的核心挑战与解决方案。通过融合历史轨迹预测与大语言模型,该模型旨在实现更可靠的端到端自动驾驶。文章详细解析了从环境配置、多模态Token对齐、轻量控制头设计到训练优化与闭环仿真验证的全流程,为开发者提供了一份详实的避坑指南。

transformer2023的博客 385

Shell 编程学习笔记

个人学习shell笔记

qq_56984643的博客 1893

科研笔记:怎样写好博士论文?

博士论文外审避坑指南与写作要点 博士论文外审的核心关注点呈现5级优先级:科研成果(硬指标)>创新性>逻辑结构与场景合理性>文献综述与规范性>工作量验证。外审专家会重点核查:1)成果清单是否达标;2)创新点是否真实明确;3)章节逻辑是否自洽、应用场景是否细化;4)文献综述是否构建"研究坐标系";5)实验/理论支撑是否充分。需特别注意三大雷区:科学错误(直接挂稿)、伪创新、场景不合理。写作时应强化选题依据的场景细化,通过"发展阶段+跨领域对比"提升文献综述质量。

Grow into a more wonderful you 1065

碳酸钙岩石酸蚀酸溶COMSOL建模:非均质对酸蚀通道的影响

多孔介质中的流动与化学反应耦合是石油工程和地下资源开发中的核心问题,酸液与岩石矿物的溶蚀过程直接关系到酸化增产效果。在碳酸盐岩储层中,盐酸与方解石的反应速率极快,酸液会优先沿高渗透区域推进,形成指状酸蚀通道,即wormhole。传统均质模型难以描述这种局部溶蚀行为,而数值模拟工具COMSOL通过耦合达西定律、稀物质传递与孔隙度演化方程,能够定量刻画酸蚀路径与渗透率的变化规律。工程实践中,模拟结果可用于预测酸液突破体积、优化注入排量,并为基质酸化方案设计提供依据。本文围绕碳酸钙岩石酸蚀酸溶COMSOL模型,探

weixin_29009401的博客 329

Linux shell编程(学习笔记)

Linux:shell编程 1.获取用户输入的值。 #!/bin/bash function say_hello() { echo " Enter Your Name,Please. : " read name echo " Hello $name " } echo " Programme Starts Here… " say_hello echo " Programme Ends. " 2. ...

涂涂写写的笔记 476

如何在Jetson Nano上快速搭建Pytorch环境(含torchvision安装教程)

本文详细介绍了在Jetson Nano上快速搭建PyTorch环境的完整步骤,包括系统准备、PyTorch安装优化、torchvision编译安装及环境测试。通过本指南,开发者可以高效部署深度学习开发环境,充分利用Jetson Nano的GPU加速能力进行计算机视觉项目开发。

weixin_42628941的博客 340

shell 多个引号冲突_Shell编程学习笔记

Shell编程学习笔记小书匠shellLinux2020年最后一天,学习了Shell编程,希望对以后的工作能有所帮助。以下是学习笔记,写在一个shell脚本中,经过测试可以运行,大家可以将它作为一个学习资料,相信如果能静下心来看完,自然也能学会shell编程,如果能逐句敲出来更能加深理解,记忆更加深刻。练习使用的操作系统版本是:CentOS Linux release 7.5.1804 ...

weixin_35435768的博客 303

1、JMP脚本编程全面指南:从基础到高级应用

本博客全面介绍了JMP脚本编程的各个方面,从JMP基础和JSL入门,到数据类型、数据结构、编程方法、数据表操作、图形与三维场景脚本,再到应用程序创建与扩展功能。内容涵盖脚本工具使用、常见任务实现、兼容性说明及未来发展趋势,旨在帮助用户掌握JMP脚本语言的强大功能,提升数据分析的自动化与定制化能力。适合从初学者到高级用户的深入学习与实践参考。

flink9streamer的博客 267

深入大模型-19-Windows10中安装OpenClaw-CN配置接入智谱免费大模型

OpenClaw CN (中国社区版) 是 OpenClaw 的本地化维护版本,针对国内网络环境进行了深度优化,源码级原生支持 DeepSeek/Qwen 等国产大模型,致力于让中国开发者拥有最顺滑的 Agent 开发体验。

qq_20466211的博客 771

Shell脚本编程学习笔记(序)

以前都是非系统性的学习Linux指令,一般也就用到什么百度什么,用完之后差不多没几天也就忘了。学来学去,熟悉的指令永远就那几个,永远记不住其他的指令,查找的自己都嫌烦了。 恰好目前项目不是很忙,就打算把Shell脚本编程完整的学习一遍,并将学习笔记记录下来,也好方便温习和后续查找。毕竟知识经过写和说才能记的更加牢固。本着也是不喜看书的性子,借这个机会,看看自己能不能坚持下去,每天学习一点,多

码农的记录 427

2024年电气工程师最新面试题及答案

1. **基本电气工程原理**:包括电流、电压、电阻、功率等基本概念。2. **欧姆定律**:V = IR,描述电压、电流和电阻之间的关系。42. **风力发电系统组成**:包括风力涡轮机、发电机、控制系统等。44. **智能电网技术**:包括自动化控制、通信技术、数据分析等。10. **减少EMI**:使用屏蔽、滤波、合理布线等方法。40. **光伏系统组成**:包括光伏板、逆变器、控制器等。48. **能量存储技术**:包括电池、超级电容器、飞轮等。

guo162308的博客 6565

嵌入式学习笔记--12.linux shell编程

shell中数据是弱类型,默认识别为字符串类型不需要,先定义名字规则,遵循C的命名规则(不带空格),不能带号给值时等号两边不能有空格var=123 #正确#var = 123 #错误。

qq_40022022的博客 1538

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

学习笔记4——Shell编程

学习笔记4——Shell编程 基础正则表达式 1.正则表达式与通配符 ● 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配\color{red}{包含匹配}包含匹配。grep、awk、sed等命令可以支持正则表达式。 ● 通配符用来匹配符合条件的文件名,通配符是完全匹配\color{red}{完全匹配}完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。 2.基础正则表达式 “*”前一个字符匹配0次,或任意多次 ● grep "a*"

qq_41913134的博客 264

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

《Linux Shell编程学习笔记之一》

《Linux Shell编程学习笔记之一》前言由于自己一直在Windows上面编程,用linux用的比较少,学习linux还是本科大二学的一点点知识。因此自己就准备花点时间来熟悉下linux。自己很久以前买的鸟哥的《Linux私房菜基础学习篇》也就终于能够排上了用场。由于自己是准备借助于学习Shell编程来熟悉Linux。因此首先推荐一个学习地址:http://c.biancheng.net/cpp

wojiushimogui的博客 970

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Shell编程学习笔记

一、Shell概述 Shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。(Shell语言是一种解释形语言,即写完不需要编译就可以运行。) 学习Shell的目的是:编写脚本,有助于以后的开发 1.查看Linux系统中的shell解析器 其中/bin/sh和/bin/bash是CentOs中的shell解析器 sh和bash的关系:两者本质上是同一个东西,sh是指向bash的一个软链接。 二、Shell脚本入门 1.创建并运行简单脚本文件,打印“hello world!” 注

m0_47446228的博客 786

shell 编程学习笔记

shell 编程学习笔记概述第一个 shell 脚本变量字符串和引号总结 概述   本篇博客记录一下 shell 编程的一些常规操作,欢迎大家留言评论。 第一个 shell 脚本   在 Linux 下使用文本编辑器编写如下的代码,并保存为test.sh,可以不要后缀名,此时该文件一般是没有可执行权限的。使用命令chmod +x test.sh添加可执行权限,然后./test.sh即可执行。 #!/bin/bash # 指定解释器,也可以用 #!/bin/sh echo "fanxinli" #

lifanxin的博客 511

【学习笔记】Shell编程---流程控制语句

Shell编程中流程控制语句---if、case、select循环、for循环、while循环、until循环

2302_76629181的博客 1218

shell编程学习笔记

前段时间看的shell编程,边看边记下来的笔记,不过有些截图没能发上来,参考书籍《UNIX.Shell编程24学时教程》。SHELL编程一UNIX和Shell工具简介<br />一、基础知识<br />Shell提供一个到UNIX系统的接口,它收集用户输入并根据输入执行程序,并显示程序的输出。有时被叫做命令解释器。<br />1、命令:简单命令、复杂命令(带参数)、复合命令(分号隔开,如:who; ll)。<br />2、Shell类型:Bourne Shell(包括sh, ksh, bash)和C She

sunxp的专栏 1463

SHELL编程学习笔记

Linux基础是结合shell编程能做很多重要的事情,以下只对shell编程的基础进行总结。Linux基础请参考:LINUX入门教程 目录 1.给shell脚本传递位置参数 $n 2.给函数传递位置参数 ${n} 3.特殊变量 3.1 $*与$@ 3.2 $?获取函数返回值 4.字符串 4.1 字符串拼接,直接放在一起,不要空格 4.2字符串截取 从指定字符(子字符串)开始截取...

li 510

shell脚本编程 学习笔记

1.shell简介 1.1 什么是shell Shell 是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。 交互的方式:从键盘输入命令,通过/bin/bash的解析,可以立即得到Shell的回应 [root@clsn ~]# ls anaconda-ks.cfg [root@clsn ~]# echo ls |bash anaconda-ks.cfg 非交互的方式: 脚

Maxie 917

Linux Shell编程学习笔记一:shell简介

Q:什么是Shell,什么是shell脚本? W:Shell是一种用C语言编写的程序,它是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作。它是命令语言、命令解释程序及程序设计语言的统称。它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。 命令解释程序:shell是一个命令语言解释器,它拥有自己内建的shell命令集,shel

菜鸟程序媛的进阶之路 2893

Linux Shell编程学习笔记——目录(附笔记资源下载)

写在前面   最近花了些时间学习Shell,视频学习过程中做了笔记,留给大家参考。   第一部分 Shell基础编程   第一部分 Shell基础编程——第一章 Shell简介 http://blog.youkuaiyun.com/wentasy/article/details/8702846   第一部分 Shell基础编程——第二章变量和运算符 http://blog.youkuaiyun.com

DBA@Robin 6843

Shell编程视频学习笔记

文章目录Shell编程Shell 入门简介两类程序设计语言HelloWorldShell 编程之变量详解测试脚本:输出\$0、$1、$2、\$*、\$#、\$?测试脚本:echo输出If 条件语句测试脚本:比大小测试脚本:判断目录是否存在,不存在则创建(注意,中括号之间必须要空格)。测试脚本:多条件测试测试脚本:自动备份MySQL数据库 Shell编程 Shell 入门简介 Shell是一个用C语言编写的程序,通过Shell用户可以访问操作系统内核服务,类似于DOS下的command和后来的cmd.exe。

weixin_41665162的博客 844
下一篇: 存储过程
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值