shell编程实用教程

Shell编程进阶篇(完结)    1.1 for循环语句      在计算机科学中,for循环(英语:for loop)是一种编程语言的迭代陈述,能够让程式码反复的执行。      它跟其他的循环,如while循环,最大的不同,是它拥有一个循环计数器,或是循环变数。这使得for循环能够知道在迭代过程中的执行顺序。 1.1.1 shell中的for循环          shell中的for... 阅读详情

SHELL编程[Bash编程手册]

 

============================== SHELL编程 ==============================

 

一、Shell语法
  1.1、变量声明
  1.2、数组声明和使用
  1.3、特殊的变量
  1.4、运算和运算符
      1.4.1、整数运算符
  1.5、流程语句
      1.5.1、if 语句
      1.5.2、case语句
      1.5.3、select 语句
  1.6、循环语句
      1.6.1、for语句
      1.6.2、while 语句
      1.6.3、breake 和continue
      1.6.4、shift
二、函数
三、shell程序调试
四、信号
五、bash中常用的命令

 

=============== 一、Shell语法 ===============

 

1.1、变量声明

 

变量=值 (注意:等号两侧不能有空格)
a=”hello”
b=9
unset a 撤销变量 a
readonly a=2 声明静态的变量 a=2 ,不能 unset
export 变量名 可把变量提升为全局环境变量,可供其他shell程序使用

 

变量应用中要注意:
echo “$1 = $1 ; $2 = $2 “; 屏蔽$1 ,屏蔽 $2 ,直接显示 $1 ,$2,同理*也屏蔽了 * 的通配符作用
${SAT}day ,变量要与字符串连在一起时,应该用 ${}
a= `ls -al` 反引号,运行里面的命令,并把结果返回给变量a
a=$(ls -al) 等价于反引号
单引号‘’和双引号“”的区别,单引号完全屏蔽 $a 变量,双引号不屏蔽$a,单引号和双引号都屏蔽 * 的通配符作用。

 

1.2、数组声明和使用

1 name[0]="Tom"
2 name[1]="Tomy"
3 name[2]="John"
4 或
5 name=("Tom" "Tomy" "John")

例子:

 

 

复制代码
1 #!/bin/bash
2 name=("Tom" "Tomy" "John")
3 for i in 0 1 2
4 do
5    echo $i:${name[$i]}
6 done
复制代码

 

1.3、特殊的变量

 

$0:脚本名字。此变量包含地址,可以使用basename $0获得脚本名称。
$1:第一个参数
$2,$3,$4,$5,…一次类推。
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数,,以(“$1 $2…”)
$$ 脚本运行的ID号
$! 后台运行的最后一个进程的ID号
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。(“$1″”$2″…)
$- 显示shell使用的当前选项。
$? 显示最后命令的推出状况。0表示没有错误。

 

例子:

 

 

复制代码
 1 #!/bin/sh
 2 if [ $# -ne 2 ] ; then
 3    echo "Usage: $0 string file";
 4    exit 1;
 5 fi
 6 grep $1 $2 ;
 7 if [ $? -ne 0 ] ; then
 8    echo "Not Found "$1" in $2";
 9    exit 1;
10 fi
11 echo "Found "$1" in $2";
复制代码

 

上面的例子中使用了$0 $1 $2 $# $? 等变量,下面是程序的解释:

判断运行参数个数,如果不等于2,显示使用”用法帮助”, 其中 $0 表示就是脚本自己。
用grep 在$2 文件中查找$1 字符串。
判断前一个命令运行后的返回值(一般成功都会返回0, 失败都会返回非0)。
如果没有成功显示没找到相关信息,否则显示找到了。
其中”表示转义,在”" 里面还需要显示”号,则需要加上转义符”

 

参数置换的变量
1、变量=${参数:-word}:如果设置了参数,则用参数的值置换变量的值,否则用word置换。即这种变量的值等于某一个参数的值,如果该参数没有设置,则变量就等于word的值。
[ -z "${COLUMNS:-}" ] && COLUMNS=80
2、变量=${参数:=word}:如果设置了参数,则用参数的值置换变量的值,否则把变量设置成word,然后再用word替换参数的值。注意,位置参数不能用于这种方式,因为在Shell程序中不能为位置参数赋值。
3、变量=${参数:?word}:如果设置了参数,则用参数的值置换变量的值,否则就显示word并从Shell中退出,如果省略了word,则显示标准信息。这种变量要求一定等于某一个参数的值。如果该参数没有设置,就显示一个信息,然后退出,因此这种方式常用于出错指示。
4、变量=${参数:+word}:如果设置了参数,则用word置换变量,否则不进行置换。

 

字符串匹配的操作:

 

${PARAMETER#WORD} shell 像文件名扩展中那样扩展 WORD,并从 PARAMETER 扩展后的值的开头删除最短的匹配模式(若存在匹配模式的话)。使用 ‘@’ 或 ‘$’ 即可删除列表中每个参数的模式。
${PARAMETER##WORD} 导致从开头删除最长的匹配模式而不是最短的匹配模式。
${PARAMETER%WORD} shell 像文件名扩展中那样扩展 WORD,并从 PARAMETER 扩展后的值末尾删除最短的匹配模式(若存在匹配模式的话)。使用 ‘@’ 或 ‘$’ 即可删除列表中每个参数的模式。
${PARAMETER%%WORD} 导致从末尾删除最长的匹配模式而不是最短的匹配模式。
${PARAMETER/PATTERN/STRING} shell 像文件名扩展中那样扩展 PATTERN,并替换 PARAMETER 扩展后的值中最长的匹配模式(若存在匹配模式的话)。为了在 PARAMETER 扩展后的值开头匹配模式,可以给 PATTERN 附上前缀 #,如果要在值末尾匹配模式,则附上前缀 %。如果 STRING 为空,则末尾的 / 可能被忽略,匹配将被删除。使用 ‘@’ 或 ‘$’ 即可对列表中的每个参数进行模式替换。
${PARAMETER//PATTERN/STRING} 对所有的匹配(而不只是第一个匹配)执行替换。

 

變數設定方式 str 沒有設定 str 為空字串 str 已設定非為空字串

 

 

复制代码
 1 var=${str-expr} var=expr var= var=$str
 2 var=${str:-expr} var=expr var=expr var=$str
 3 var=${str+expr} var= var=expr var=expr
 4 var=${str:+expr} var= var= var=expr
 5 var=${str=expr} str=expr
 6 var=expr str 不變
 7 var= str 不變
 8 var=$str
 9 var=${str:=expr} str=expr
10 var=expr str=expr
11 var=expr str 不變
12 var=$str
13 var=${str?expr} expr 輸出至 stderr var= var=str
14 var=${str:?expr} expr 輸出至 stderr expr 輸出至 stderr var=str
15  
16  
17 [subsir@pinguino ~]$ x="a1 b1 c2 d2"
18 [subsir@pinguino ~]$ echo ${x#*1}
19 b1 c2 d2
20 [subsir@pinguino ~]$ echo ${x##*1}
21 c2 d2
22 [subsir@pinguino ~]$ echo ${x%1*}
23 a1 b
24 [subsir@pinguino ~]$ echo ${x%%1*}
25 a
26 [subsir@pinguino ~]$ echo ${x/1/3}
27 a3 b1 c2 d2
28 [subsir@pinguino ~]$ echo ${x//1/3}
29 a3 b3 c2 d2
30 [subsir@pinguino ~]$ echo ${x//?1/z3}
31 z3 z3 c2 d2
复制代码

 

字符串子集提取:

${x:3:5}
的值就是 “e val”,
清单 9. shell 参数值的子字符串

 

 

1 [subsir@pinguino ~]$ x="some value"
2 [subsir@pinguino ~]$ echo "${x:3:5}"
3 e val

 

字符串长度:

您已经知道 $# 表示参数的数量,而 ${PARAMETER:OFFSET:LENGTH} 扩展适用于单个参数以及 $* 和 $@,因此,可以使用一个类似的结构体 ${#PARAMETER} 来确定单个参数的长度也就不足为奇了。清单 10 中所示的简单的 testlength 函数阐明了这一点。自己去尝试使用它吧。
清单 10. 参数长度

 

 

1 [subsir@pinguino ~]$ testlength () { for p in "$@"; do echo ${#p};done }
2 [subsir@pinguino ~]$ testlength 1 abc "def ghi"
3 1
4 3
5 7

 

1.4、运算和运算符

 

1.4.1、整数运算符

 

整数的算术运算符
+ - * / %
赋值运算符
+= -= * = / = %=
位运算符
<< >> & | ~ ^
位运算赋值运算符
<< = >> = & = | = ~ = ^ =
逻辑运算符:
&& || ! > > = < < = != ==

 

expr命令计算一个表达式的值
格式 :expr arg
例子:
计算(2 +3 )×4 的值
1 、分步计算,即先计算2 +3 ,再对其和乘4
s=`expr 2 + 3`
expr $s * 4
2 、一步完成计算:
expr `expr 2 + 3 ` * 4
说明:
运算符号和参数之间要有空格分开;
通配符号(* ), 在作为乘法运算符时要用 、“” 、‘’ 符号修饰

 

关键字let计算表达式的值:
#!/bin/bash
x=2006
let "x = $x + 1"
echo $x
x="a string."
echo $x

 

又出现了新的关键字:let。关于整数变量计算,有如下几种:" + - * / % ",他们的意思和字面意思相同,在*和/之前必须冠以反斜线,已防被SHELL先行解释。整数运算一般通过 let 和 expr 这两个指令来实现,如对变量 x 加 1 可以写作:let "x = $x + 1" 或者 x=`expr $x + 1`

 

1.4.2、逻辑运算符

 

对应操作 整数 字符串
相同 -eq =
不同 -ne !=
大于 -gt >
小于 -lt <
大于或等于 -ge
小于或等于 -le
为空 -z
不为空 -n

 

文件操作逻辑运算符:
-d file ----当file是一个目录时,返回 True
-f file ----当file是一个普通文件时,返回 True
-r file ----当file是一个只读文件时,返回 True
-s file ----当file文件长度大于0时,返回 True
-w file ----当file是一个可写文件时,返回 True
-x "/bin/ls" ----当/bin/ls是一个可执行文件时,返回 True,目录是否可访问
-e file ----当file存在时,返回True
-o file ----当file文件的所有者是当前用户时,返回True
-z file ----当file长度为0时,返回True
-u -----文件的 UID 标志被设置
-G -----文件的组 ID 和当前用户相同
file1 -nt file2 -----文件 file1 比 file2 更新
file1 -ot file2 -----文件 file1 比 file2 更老

 

逻辑连接符:
! expr 当expr的值是False时,返回True
Expr1 -a expr2 当expr1,expr2值同为True时,返回True
Expr1 -o expr2 当expr1,expr2的值至少有一个为True时,返回True

 

命令逻辑连接符:
[ -r "$mailfolder" ]||{ echo "Can not read $mailfolder" ; exit 1; }
使用{}把两个命令括起来,表示一个函数的用法。 && 与 ||或
[ -f "/etc/shadow" ] && echo "This computer uses shadow passwors"
注意:在“[”和“]”符号的左右都留有空格

 

例子:

 

 

复制代码
1 #!/bin/sh
2 mailfolder=/var/spool/mail/james
3 [ -r "$mailfolder" ]||{ echo "Can not read $mailfolder" ; exit 1; }
4 echo "$mailfolder has mail from:"
5 grep "^From " $mailfolder
6 其中 “^From“ 表示以 From 开头的
复制代码

 

1.5、流程语句


1.5.1、if 语句

 

 

复制代码
 1 if [ 逻辑表达式 ]; then
 2  #command code
 3 elif [ 逻辑表达式 ]; then
 4  #commandcode
 5 else
 6   #commandcode
 7 fi
复制代码

 

如果您为了简洁,想把 then 和 if 放在一行,那就要这样写了:if [ expression ]; then。即在 then 前加一个“;”号。

 

 

1.5.2、case语句

 

case string1 in
str1 ) commands1;;
str2 ) commands2;;
*) commands3;;
esac

 

例子:

 

#file lf.gz
lf.gz: gzip compressed data, deflated, original filename,
last modified: Mon Aug 27 23:09:18 2001, os: Unix
脚本:

 

 

复制代码
1 #!/bin/sh
2 ftype=`file "$1"`
3 case "$ftype" in
4    "$1: Zip archive"*) unzip "$1" ;;
5    "$1: gzip compressed"*) gunzip "$1" ;;
6    "$1: bzip2 compressed"*)bunzip2 "$1" ;;
7    *)  # * 通配符 代表其他
8    error "File $1 can not be uncompressed with smartzip";;
9 esac
复制代码

 

例子:

 

 

复制代码
 1 #!/bin/bash
 2 echo "Hit a key, then hit return."
 3 read Keypress
 4  
 5 case "$Keypress" in
 6    [a-z] ) echo "Lowercase letter";;
 7    [A-Z] ) echo "Uppercase letter";;
 8    [0-9] ) echo "Digit";;
 9    * ) echo "Punctuation, whitespace, or other";;
10 esac
11 exit 0
复制代码

 

 

1.5.3、select 语句
尤其擅长于交互式使用。用户可以从一组不同的值中进行选择。

 

 

select var in … ; do
 break
done

 

例子:

 

 

复制代码
1 #!/bin/sh
2 echo "What is your favourite OS?"
3 select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do
4     break
5 done
6 echo "You have selected $var"
复制代码

 

#下面是该脚本运行的结果:

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

 

1.6、循环语句
1.6.1、for语句

 

 

for var in 数组列表; do
 #command bolock
done

 

例子1:

 

 

1 #!/bin/bash
2 for var in A B C ; do
3  echo "var is $var"
4 done

 

例子2:

 

 

复制代码
 1 #!/bin/sh
 2 #列出 RPM 的数目
 3 # 用法: showrpm rpmfile1 rpmfile2 ...
 4 # EXAMPLE: showrpm /cdrom/RedHat/RPMS/*.rpm
 5 for rpmpackage in $*; do
 6  if [ -r "$rpmpackage" ];then
 7   echo "== $rpmpackage =="
 8   rpm -qi -p $rpmpackage
 9  else
10   echo "ERROR: cannot read file $rpmpackage"
11  fi
12 done
复制代码

 

例子3:

 

 

1 for var1 in "$@"
2 do
3    #statements
4 done

 

例2和例3的 $* 和“$@”是相同的

 

1.6.2、while 语句

 

while [ express ]; do
   #command
Done

 

例子1:

 

 

复制代码
1 count=1
2 while [ -n "$*"]
3 do
4    echo "this is a parameter number $count $1"
5    shift
6    count='expr $count + 1'
7 done
复制代码

 

例子2:

 

 

复制代码
 1 while [ -n "$1" ]; do
 2 case $1 in
 3 -h) help;shift 1;; # function help is called
 4 # 执行 help 函数 , shift 1 表示,移除第一个变量 $1 ,则第二个变为: $1
 5   -f) opt_f=1;shift 1;; # variable opt_f is set
 6   -l) opt_l=$2;shift 2;; # -l takes an argument -> shift by 2
 7   --) shift;break;; # end of options
 8   -*) echo "error: no such option $1. -h for help";exit 1;;
 9   *) break;;
10 esac
11 done
复制代码

 

就像平常执行命令一样,当有参数-h 时,则执行相应的动作

 

1.6.3、breake 和continue

 

关键字”break” 用来跳出循环。而关键字”continue”用来不执行余下的部分而直接跳到下一个循环。

 

1.6.4、shift

 

shift将存放在位置变量中的命令行参数,依次向左传递.例如
位置变量当前值为:
$1=file1 $2=file2 $3=file3
执行一次shift命令后,位置变量的值为:
$1=file2 $2=file3
还可以在shift命令中指定位置变量转移的次数, 如:
shift n
例子:

复制代码
 1 while [ "$1"]
 2 do
 3    if [ "$1"="-i"] then
 4       infile=” $2″
 5       shift 2
 6    else if [ "$1"="-o"] then
 7       outfile=”$2″
 8       shift 2
 9    else
10       echo “Program $0 does not recognize option $1″
11    fi
12 done
复制代码

 

 

 

二、函数
脚本 b2d 将二进制数 (比如 1101) 转换为相应的十进制数。这也是一个用expr命令进行数学运算的例子:

 

 

复制代码
 1 #!/bin/sh
 2 # vim: set sw=4 ts=4 et:
 3 help()
 4 {
 5  cat < b2h -- convert binary to decimal
 6 USAGE: b2h [-h] binarynum
 7 OPTIONS: -h help text
 8 EXAMPLE: b2h 111010
 9 will return 58
10 HELP
11  exit 0
12 }
13  
14  
15 error()
16 {  # print an error and exit
17   echo "$1"
18   exit 1
19 }
20  
21 lastchar()
22 {  # return the last character of a string in $rval
23   if [ -z "$1" ]; then
24     # empty string
25     rval=""
26     return
27   fi
28   # wc puts some space behind the output this is why we need sed:
29   numofchar=`echo -n "$1" wc -c sed ''s/ //g'' `
30   # now cut out the last char
31   rval=`echo -n "$1" cut -b $numofchar`
32 }
33  
34 chop()
35 {  # remove the last character in string and return it in $rval
36   if [ -z "$1" ]; then
37     # empty string
38     rval=""
39     return
40   fi
41   # wc puts some space behind the output this is why we need sed:
42   numofchar=`echo -n "$1" wc -c sed ''s/ //g'' `
43   if [ "$numofchar" = "1" ]; then
44     # only one char in string
45     rval=""
46     return
47   fi
48   numofcharminus1=`expr $numofchar "-" 1`
49   # now cut all but the last char:
50   rval=`echo -n "$1" cut -b 0-${numofcharminus1}`
51 }
52  
53 while [ -n "$1" ]; do
54 case $1 in
55   -h) help;shift 1;; # function help is called
56   --) shift;break;; # end of options
57   -*) error "error: no such option $1. -h for help";;
58   *) break;;
59 esac
60 done
61  
62 # The main program
63 sum=0
64 weight=1
65 # one arg must be given:
66 [ -z "$1" ] && help
67 binnum="$1"
68 binnumorig="$1"
69  
70 while [ -n "$binnum" ]; do
71   lastchar "$binnum"
72   if [ "$rval" = "1" ]; then
73     sum=`expr "$weight" "+" "$sum"`
74   fi
75   # remove the last position in $binnum
76   chop "$binnum"
77   binnum="$rval"
78   weight=`expr "$weight" "*" 2`
79 done
80 echo "binary $binnumorig is decimal $sum"
复制代码

 

=============== 三、shell程序调试 ===============

 

在编程过程中难免会出错,有的时候,调试程序比编写程序花费的时间还要多,Shell程序同样如此。  Shell程序的调试主要是利用bash命令解释程序的选择项。
调用bash的形式是:  
bash -选择项Shell程序文件名几个常用的选择项是:
  -e 如果一个命令失败就立即退出。
  -n 读入命令但是不执行它们。
  -u 置换时把未设置的变量看做出错。
  -v 当读入Shell输入行时把它们显示出来。
  -x 执行命令时把命令和它们的参数显示出来。

 

=============== 四、信号 ===============

 

  trap命令用于在Shell程序中捕捉信号,之后可以有3种反应方式:
  (1)执行一段程序来处理这一信号。
  (2)接受信号的默认操作。
  (3)忽视这一信号。
  trap对上面3种方式提供了3种基本形式:
  第一种形式的trap命令在Shell接收到与signal list清单中数值相同的信号时,将执行双引号中的命令串。
  trap ‘commands’ signal-list
  trap “commands” signal-list
  为了恢复信号的默认操作,使用第二种形式的trap命令:
  trap signal-list
  第三种形式的trap命令允许忽略信号:
  trap ” ” signal-list
  注意:
  (1)对信号11(段违例)不能捕捉,因为Shell本身需要捕捉该信号去进行内存的转储。
  (2)在trap中可以定义对信号0的处理(实际上没有这个信号),Shell程序在其终止(如执行exit语句)时发出该信号。
  (3)在捕捉到signal-list中指定的信号并执行完相应的命令之后,如果这些命令没有将Shell程序终止的话,Shell程序将继续执行收到信号时所执行的命令后面的命令,这样将很容易导致Shell程序无法终止。
  另外,在trap语句中,单引号和双引号是不同的。当Shell程序第一次碰到trap语句时,将把commands中的命令扫描一遍。此时若commands是用单引号括起来的话,那么Shell不会对commands中的变量和命令进行替换,否则commands中的变量和命令将用当时具体的值来替换。

 

=============== 五、bash中常用的命令Alias |设置命令别名 ===============

 

Bg |将一个被挂起的进程在后台执行
cd |改变用户的当前目录
exit |终止一个shell
export |使作为这个命令的参数的变量及其当前值,在当前运行的shell的子进程中可见
fc |编辑当前的命令行历史列表
fg |让一个被挂起的进程在前台执行
help |显示bash内部命令的帮助信息
history |显示最近输入的一定数量的命令行
kill |终止一个进程
pwd |显示用户当前工作目录
unalias |删除命令行别名

尚硅谷Shell教程(shell自动化编程精讲)_笔记 在线编译:https://c.runoob.com/compile/18 哔哩哔哩:https://www.bilibili.com/video/BV1hW41167NW?p=7&spm_id_from=pageDriver 一、Shell中的变量 (1)常用系统变量:$HOME、$PWD、$SHELL、$USER (2)基本语法 定义变量:变量=值 撤销变量:unset 变量 声明静态变量:readonly 变量,注意:不能unset (3)变量定义规则 等号两侧不能有空格; 在bash中,变量默 阅读详情

相关推荐

Shell脚本学习教程PDF版

Shell脚本学习教程PDF版

Shell基本语法

一、Shell语法 1.1、变量声明 1.2、数组声明和使用1.3、特殊的变量 1.4、运算和运算符 1.4.1、整数运算符 1.5、流程语句 1.5.1、if 语句 1.5.2、case语句 1.5.3、select 语句 1.6、循环语句 1.6.1、for语句 1.6.2、while 语句 1.6.3、breake 和continue 1.6.4、shift三、sh...

duanyunxi的专栏 378

shell编程教程PDF

学习shell编程不错的资料,强烈推荐,好不容易找到的,分享一下!

Shell脚本编程史上最全手册

Shell脚本简介 shell命令按一定语法组成的文件。 Shell脚本有什么用? 批处理文件 / 整合命令 软件启动 性能监控 日志分析 ... Shell命令的本质 内置命令 / 外部命令 Shell脚本语言和C语言一样吗? 编译型语言 解释型语言 常用的Shell解释器有哪些? cat /etc/shells [root@iZuf6a7sd2zy3fpen7rmbhZ ~]# cat /etc/shells /bin/sh //对应的解释器 /bin/bash /usr/

我想月薪过万的博客 4930

LinuxShell编程基础教程.pdf

LinuxShell编程基础教程.pdf

2.数字芯片时序正确的前提—Max-transition

芯片物理设计中最基本的Max-transition检查

weixin_43868998的博客 5422

【shell编程】

文章目录Shell编程(熟悉)1. 基本概念2. 编写第一个程序3. 执行Shell程序的方式4. 变量的定义4.1 语法格式4.2 定义规则5. 常用运算符5.1 算术运算符5.2 关系运算符5.3 流程控制语句1. if 判断2. case 语句3. for 循环4. while循环5. 函数 Shell编程(熟悉) 1. 基本概念 Shell是一个命令行解释器,可以接收应用程序或用户命令,然后访问操作系统内核。 Shell是一个功能相当强大的编程语言,易编写、易调试、灵活性强; 2. 编写第一个

weixin_50707328的博客 951

详解Numpy中的transpose方法

最近在学Numpy碰到了关于数组转置和换轴的概念,尤其是对tanspose方法有些疑惑,尤其是多维,查了不少资料,终于搞懂了。 Numpy数组的轴(axis) 所谓的**轴(axis)**可以理解为数组的维度。 具体而言,二维数组就是有两个维度,如果从空间上看,它就是一个平面,由x轴和y轴构成,而与此相对应的,该二维数组就有两个轴,x轴对应0轴,y轴对应1轴。 同理,三维数组有三个维度,空间上...

BlankGrid的博客 936

linux的shell编程入门

目录 1.1 前言 1.1.1 为什么学Shell 1.1.2 什么是shell 1.1.3 什么是Shell脚本 1.1.4 脚本语言的种类 1.1.5 系统中的shell 1.2 脚本书写规范 1.2.1 脚本统一存放目录 1.2.2 选择解释器 1.2.3 编辑脚本使用vim 1.2.4 文件名规范 1.2.5 开发的规范和习惯小结 1.3 shell脚本的执行 ...

weixin_36670529的博客 614

LAMMPS实操系列(四): 高熵合金FCC-CoCrCuFeNi的退火模拟

我们对FCC-CoCrCuFeNi的退火模拟思路主要是,首先将材料以均匀的速率用100 ps从300 K升温至1000 K,然后在1000 K的温度下平衡100 ps,随后以均匀的速率用100 ps从1000 K降温至300 K,随后通过共轭梯度下降法做静力学结构优化得到退火后的结构。由于FCC-CoCrCuFeNi高熵合金被认为是潜在的工程结构材料[1],接下来我们将对退火前后的结构进行压缩模拟,对比退火前后FCC-CoCrCuFeNi高熵合金的力学性能变化,敬请各位读者关注我们的更新。

Ceshigo_CD的博客 4837

【虚幻引擎UE】UE5 阴影异常与优化

【虚幻引擎UE】UE5 阴影异常与优化解决方案合集

灵境引路人 3万+

Linux 的 shell 编程

Linux 的shell 编程 -记住三个命令的运用形式 grep ‘字符’ 文件 sed ‘命令’ 文件 awk ‘条件{命令}’ 文件 -死记一点,单引号内就是正则表达式的用法 1.grep 及正则查询 2.cut 操作 2.1 cut 查看 2.2 cut [选项] 文件名 选项: -f 列号 :提取第几列 -d 分隔符 :按照指定分隔符分...

weixin_43646034的博客 405

把时间当成数据:SAP ABAP 里的 DATS/TIMS 与 DATN/TIMN,怎么选才不踩坑

SAP项目中日期时间字段的陷阱与优化 日期时间字段(DATS/TIMS)在SAP项目中看似简单却常引发事故,主要问题包括: 非法日期(如20201331)入库后,在月结、对账时爆发异常 空值被处理为00000000导致排序错误 ABAP提供两种处理方案: 经典类型DATS/TIMS:存储为字符格式,校验宽松易存脏数据 HANA原生类型DATN/TIMN:数据库级校验,写入即拦截非法值 优化建议: 在接口层和入库前进行严格校验 新项目优先使用DATN/TIMN类型 对遗留数据使用DATS_IS_VALID等函

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 182

嵌入式linux开发-(三)shell编程

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。提示:以下是本篇文章正文内容,下面案例可供参考菜鸟教程-shell编程。

qq_52608074的博客 1678

STM32F103(二十三)通用同步异步收发器(USART)

学习板:STM32F103ZET6 往期博客: STM32F103五分钟入门系列(一)跑马灯(库函数+寄存器)+加编程模板+GPIO总结 STM32F103五分钟入门系列(二)GPIO的七大寄存器+GPIOx_LCKR作用和配置 STM32F103五分钟入门系列(三)GPIO的常用库函数使用方法总结+一个网络上的误区 STM32F103五分钟入门系列(四)蜂鸣器实验(库函数+寄存器) STM32F103五分钟入门系列(五)按键实验(库函数+寄存器) STM32F103五分钟入门系列(六)时钟框图+相关寄存器

Curnane0_0的博客 1019

【异常】Openclaw Gateway进程异常停止问题分析与解决方案

本文分析了Gateway服务异常停止的问题,提出了三种解决方案。核心问题是缺乏进程守护和自动恢复机制,导致服务崩溃后无法自行重启。推荐方案是使用PM2进程管理工具(方案1),提供进程监控、自动重启和开机自启功能。替代方案包括自定义守护脚本(方案2)和supervisord管理(方案3)。这些方案都能有效解决当前服务脆弱性问题,显著提升服务可用性,其中PM2方案成熟度高、配置简单,是首选解决方案。实施后可将服务从人工干预转变为自动恢复,确保业务连续性。

奶爸的编程之路,也就一周冷个三天 456

shell 编程概要

背景 运维: 目标:保障系统长期、稳定、安全运行 工作内容;安装、配置、备份、监控、邮件报警、自动报警、 物理世界 CPU 内存 网卡 磁盘 资源角度 计算 存储 网络 一. 什么是shell 脚本语言 查看所有的脚本 cat /etc/shells 做什么 自动化批量系统初始化 (update,软件安装,时区设置,安全策略,防火墙、端口转发等) 自动化批量软件部署 (LAMP,Tomcat,Nginx) 管理应用程序 自动化备份恢复程序(MySQL 完全、增量备份)

江湖书苑 312

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Shell编程详解(包括定时备份数据库)

Shell脚本编程 文章目录Shell脚本编程1.概述2.Shell变量3.全局变量(环境变量)4.位置参数变量5.预定义变量6.表达式计算7.条件判断与流程控制8.循环控制9.read读取控制台输入10.函数11.综合案例:定时备份数据库 1.概述 案例 1 helloworld #!/bin/bash echo "hello,world"; #该句在控制台打印hello,World 方式2比较常用 2.Shell变量 #给变量赋值 A=10 #打印变量,输出 $变量名 echo A=$A #u

欢迎来到风离的个人空间 499

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

shell学习

在写之前分享之前碰到的一个小问题 在shell中有两种多行注解 1 <<! ! 2 << EOF EOF 这点需要注意 数组 Shell数组表达 用括号来表示,元素用“空格”符号分割开, 语法:arr=(value1,value2,value3)(这种方式带值) 获取@ 可以获取数组的所有元素 获取长度就是使用@和的时候就是在前面{}内加# 运算符 两种方式 $((运算式)...

醉生梦是的博客 141

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Shell 程序设计简易教程

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34272308的博客 120

Bash Shell Script Tutorials

Shell script programming is an essential skill of Unix/Linux/Cygwin users. With the support of dozens of utilities, the shell script could be multi-purpose Swiss knife to improve our productivity and

闲云野鹤话IT -- Enjoy IT 828

Linux Shell编程

Linux Shell编程 一、简述 简单的介绍shell脚本的基本用法。 shell脚本是 由一些按照一定格式组合起来的shell命令 组成。shell脚本不需要编译就可以直接执行,它是边解释边执行的。 二、命令解释器 Linux系统提供多种不同的Shell以供选择。常用的有Bourne Shell(简称sh)、C-Shelll(简称csh)、Kor...

Genven_Liang的博客 1万+

shell编程

什么是shell编程 高大上的解释,往往让人摸不住头脑。一句话概括就是:shell编程就是对一堆Linux命令的逻辑化处理。 为什么要会shell编程 就是批处理动作,解放双手,避免重复性劳动。 第一个shell程序 #!/bin/bash #第一个shell小程序 echo hello world! 第一行表示我们选择使用bash shell。shell中#符号表示注释。...

1万+
上一篇: 20131128
下一篇: html placeholder
张征宇
博客等级 码龄14年 4粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值