- 浏览: 1309321 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (732)
- Java_about (146)
- Spring_Hibernate_Struts_OpenSource (27)
- linux_unix (62)
- life_sth (22)
- js_css_html_xml_nodejs (69)
- design_pattens (1)
- Perl (8)
- php_ecshop (4)
- DB_Mysql_Oracle_Informix_SqlServer (43)
- JSTL (8)
- Testing_自动化测试 (42)
- DB_ID_UUID (4)
- SEM_SEO (1)
- english_study_improvement (4)
- SVN_Git (9)
- WebService_SOA_CloudComputing (3)
- E-Commerce (1)
- Lucene_Solr (7)
- others (2)
- Regex (2)
- tomcat_jetty (8)
- zeroc-ice (1)
- java_excel (5)
- ant_maven_gradle (5)
- Unity_VR_AR_C# (2)
- jmeter (1)
- XPath_dom4j (1)
- Ruby_and_Rails (68)
- write_a_rails (17)
- manage_and_team (1)
- getting_real (1)
- ubuntu (20)
- git_and_git_flow (7)
- TODO (1)
- PM_design (2)
- Python_and_Django (8)
- NoSql_mongo_redis (24)
- C/C++ (3)
- vi_vim_gvim (0)
- c#_.Net_windows编程_dll (10)
- Php_and_Yii (9)
- Android_IOS (31)
- Mysql (5)
- sa_运维_network_硬件 (37)
- lua (2)
- c_cpp_VisualStudio (21)
- 硬件-RM-Arduino (6)
最新评论
-
shenkun58:
...
NoClassDefFoundError: Could not initialize springframework.BeanCreationException -
liaojia1:
正解,感谢
NoClassDefFoundError: Could not initialize springframework.BeanCreationException -
flingfox63:
谢谢分享,电脑上有IPV6,导致了Guard启动不了……
ruby错误解决: Address family not supported by protocol - connect(2) -
c39274936:
s = "hello_world_ruby" ...
驼峰格式和下划线格式转换_translation between camel and snake format -
yfj300:
学习了学习了学习了学习了
硬盘基本知识(磁道、扇区、柱面、磁头数、簇、MBR、DBR)
一个编程语言,一段时间不写,就容易忘记。
(想法:要么语言单一,要么设计友好,否则像现在这样几个语言切换,真是要了程序员的脑袋命了)
摘录备忘。
linux shell编程总结
http://blog.csdn.net/ltbook
本周学习了unix/linux shell编程,参考的是《LINUX与UNIX Shell 编程指南》,David Tansley著;徐焱,张春萌等译,由机械工业出版社出版的了,往内页那么一翻,都是2000年3月译的了,原书估计会更老,不过图书馆能找到合适于我 这种初学者的也许就这么本了,将就着的吧。
这本书是以Bourne shell这个UNIX系统都支持的标准shell。Bourne Again shell(BASH)、TCSH shell和Z shell它们都是相应的UNIX命令解释程序的增强型版本。BASH shell是Bourne shell的高级版本。TCSH 原来是为UNIX的BSD版本开发的C shell的增强型版本。
1.基本unix/linux命令
(1) setuid,guid
作用: suid意味着如果某个用户对属于自己的shell脚本设置了这种权限,
那么其他用户在执行这一脚本时也会具有其属主的相应权限。
guid执行相应脚本的用户将具有该文件所属用户组中用户的权限
例:chmod 4755
(2) chmod,chown,chgrp
作用:修改权限
格式:chmod [who] operator [permission] filename
who:u(文件属主) g(同组用户) o(其他用户) a(所有用户)
operator: +(增加权限) -(取消权限) =(设定权限)
permission:r(读) w(写) x(执行) s(文件属主和组set-ID) t(粘性位*) l(给文件加锁,使其他用户无法访问)
例:chmod ugo+rwx myfile 将myfile文件给u,g,o用户r,w,x的权限
(3) umask
作用:设置所创建文件/目录的缺省权限
格式:umask [value]
例: umask 022
touch file1
则file1的权限部分变为:-rw-r--r--
(4) ln
格式:ln [-s] source_path target_path
(5) touch
作用:创建一个空文档
格式:tough myfile
注解:tough myfile将创建一个文件myfile
(6) find
作用:搜索文件
格式:find pathname -options [-print -exec -ok]
-print:find命令将匹配的文件输出到标准输出
-exec:find命令对匹配的文件执行该参数所给出的shell命令,相应命令的格式为'command'{} \;
-ok:作用和-exec作用相同。只不过每一步执行都需要用户的确认
-options:(主要的)
-name:按文件名查找
-perm:按文件权限查找
-prune:使find命令不在当前指定的目录中查找
-user:按照文件属主查找
-group:按照文件所属组来查找
-mtime -n +n,按照文件的更改时间来查找,-n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前;此外,还有-atime,-ctime选项,和-mtime选项类似
-type:查找某一类型的文件,诸如:b(块设备文件),d(目录),c(字符设备文件),p(管道文件),l(符号链接文件),f(普通文件)
-size n[c]:查找文件长度为n块的文件
例:
在当前目录及其子目录中查找所有的"*.txt"文件
find . -name "*.txt" -print
在当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件
find . -perm 755 -print
在当前目录下查找除目录以外的所有类型的文件
find . ! -type d -print
用ls -l 命令列出所匹配的文件
find . -type f -exec ls -l {} \;
在/logs目录中查找更改时间在5日以前的文件并删除它们
find logs -type f -mtime +5 -exec rm {} \;
(7)echo
作用:显示文本行或变量,或者把字符串输入到文件
格式:echo string
例:
给出提示符,并输入值给变量name
echo "What's your name:\c"
read name
(8)pg
作用:显示文件
格式:pg filename
(9)read
作用:读入值给变量
格式:read var
例: read name 从键盘读入字符到name变量
(10)cat
作用:显示文件
格式:cat filename
(11)tee
作用:把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中
格式:tee filename
例:who | tee who.out 使用who命令,结果输出到屏幕上,同时保存在who.out文件中
(12)grep(全局正则表达式)
作用:允许对文本文件进行模式查找,如果找到匹配模式,grep打印包含模式的所有行
格式: grep [options] 基本正则表达式 [文件]
常用options值:
-c 只输出匹配行的计数
-i 不区分大小写(只适用于单字符)
-h 查询多文件时不显示文件名
-l 查询多文件时只输出包含匹配字符的文件名
-n 显示匹配行及行号
-s 不显示不存在或无匹配文本的错误信息
-v 显示不包含匹配文本的所有行
例:grep "sort" *.doc 在当前目录下所有的.doc文件中查找字符串"sort"
grep "48<tab>" data.f 抽取字符串后有一个<Tab>键
grep '[0-9]\{3\}\.[0-0\[3\}\.' ipfile 要抽取其中所有nnn.nnn的IP地址(原文印刷错误?)
(13)awk
格式: awk [-f field-separator] 'command' input-file(s)
=====================================================================================
awk条件操作符
=====================================================================================
操作符 描述 操作符 描述
< 小于 >= 大于等于
<= 小于等于 ~ 匹配正则表达式
== 等于 ! 不匹配正则表达式
!= 不等于
=====================================================================================
awk内置变量
------------------------------------------------------
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行-F选项
NF 浏览记录的域个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
注:awk中所采用的正则表达式的符号要比grep和sed多两个:+(匹配一个或多个字符),?(匹配模式出现率)
例:
awk '{if($4~/Brown/) print $0}' grade.txt 如果field-4包含了Brwon,打印该行
awk '$3 == "48" {print $0}' grade.txt 精确匹配,如果field-3等于了 "48",则打印该行
awk '{if( $1=="p1" && $4=="p2" ) print $0}' grade.txt 同时满足两个条件,则打印该行
awk '{if( $1=="p1" || $4=="p2" ) print $0}' grade.txt 只要满足其中一个条件,则打印该行
(14)expr 用于计算或数值测试
格式:expr argument operator argument
例: expr 10 + 10 其结果为20
expr 30 / 3 其结果为10
expr 30 \* 3 其结果为90,使用乘号时,必须用反斜线屏蔽其特定含义。
expr rr + 1 当rr非整数时,将返回错误,此处为"expr:non-numeric argument"
2.文件名的匹配
特殊的匹配符号:
* 匹配文件名中的任何字符串,包括空字符串
? 匹配文件名中的任何单个字符串
[...] 匹配[]中包含的任何字符
[!...] 匹配[]中非感吧号!之后的字符
例:
显示所有以.doc结尾的文件名
ls *.doc
显示以cl开头,后面跟任何字符串,最后以.sed结尾的文件名
ls cl*.sed
显示任意两个字符开头,接着是r,后面跟任何字符的文件
ls ??r*
显示以i或o开头的文件名
ls [io]*
匹配所有以log.开头,后面跟随一个数字,然后可以是任意字符串的文件名
ls log.[0-9]*
匹配所有以log.开头,使用[!0-9]来表示非数字开头的字符串
ls log.[0-9]*
3.文本过滤
=====================================================================================
基本元字符集及其含义
=====================================================================================
^ 只匹配行首
$ 只匹配行尾
* 一个单字符后紧跟*,匹配0个或多个此单字符
[] 匹配[]内字符。可以是一个单字符,也可以是字符序列,用-表示范围
如用[1-5]代替[12345]
\ 用来屏蔽一个元字符的特殊含义。如$ . ' " * ^ | ( ) \ + ?
. 匹配任意单字符
pattern\{n\} 用来匹配前面pattern出现次数。n为次数
pattern\{n,\}m 含义同上,但次数最少为n
pattern\{n,m\} 含义同上,但pattern出现次数在n与m之间
=====================================================================================
例:
^$ 匹配一个空行
^.$ 匹配只包含一个字符的行
compu*t 匹配字符u 0次或多次,这个可匹配computer,
A\{2\}B 匹配字母A出现两次,并以B结尾
A\{2,4\}B 匹配字母A出现2到4次之间
4.特定shell变量
=====================================================================================
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的进程ID号
$@ 与$#相同,但是使用时加引号,并在引号中返回每个参数
$- 显示shell使用的当前选项,与set命令功能相同
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误
=====================================================================================
其他:$0(脚本名字) $1 $2 $3 ...$9
5.shell输入与输出
5.1文件描述符
=====================================================================================
文件描述符 文件
0 输入文件——标准输入
1 输出文件——标准输出
2 错误输出文件——标准错误
=====================================================================================
注: 标准输入是文件描述符0,它是命令的输入,缺省是键盘,也可以是文件或其他命令的输出
标准输出是文件描述符1,它是命令的输出,缺省是屏幕,也可以是文件
标准错误是文件描述符2,它是命令错误的输出,缺省是屏幕,也可以是文件
5.2
重定向
:<,<<,>,>>
=====================================================================================
command>filename 把标准输出重定向到一个新文件中
command>>filename 把标准输出重定向到一个文件中(追加)
command 1>filename 把标准输出重定向到一个新文件中
command>filename 2>&1 把标准输出和标准错误一起重定向到一个文件中
command 2>filename 把标准错误重定向到一个新文件中
command 2>>filename 把标准错误重定向到一个文件中(追加)
command >>filename 2>&1 把标准输出和标准错误一起重定向到一个文件中(追加)
command <filename >filename 2 command命令以filename文件作为标准输入,以filename2文件作为标准输出
command <&m 把文件描述符m作为标准输入
command >&m 把标准输出重定向到文件描述符m中
command <&- 关闭标准输入
=====================================================================================
例:
#############################################################################
#! /bin/sh
# f_desc
#把文件描述符4指定为标准输入,然后打开stock.txt文件
exec 4<&0 0<stock.txt
#读入2行文本
read line1
read line2
#作为标准输入的文件描述符4被关闭
exec 0<&4
#显示两个变量的内容
echo &line1
echo &line2
#############################################################################
5.3管道
: 命令1|命令2
who | awk '{print $1"\t"$2}'
6.条件测试
格式1:test condition
格式2:[condition]
=====================================================================================
文件测试状态
=====================================================================================
-d 目录 -s 文件长度大于0,非空
-f 正规文件 -w 可写
-l 符号链接 -u 文件有suid位设置
-r 可读 -x 可执行
=====================================================================================
组合测试: -a 逻辑与 -o逻辑或 !逻辑否
例: [-w results.txt -a -w scores.txt
echo $?
检查上面两个文件是不是都是可写的
字符串测试 string_operator 可为=(相等) !=(不相等) -z(空串) -n(非空串)
格式1:test "string"
格式2:test string_operator "string"
格式3:test "string" string_operator "string"
格式4:[string_operator string]
格式5:[string string_operator string]
数值测试 numeric_operator可为 -eq(相等),-ne(不相等),-gt(大于),-lt(小于),-le(小于等于),-ge(大于等于)
格式1:"number" numeric_operator "number"
格式2:["number" numeric_operator "number"]
7.命令执行顺序 && ,||, (), {}
&&
格式:命令1 && 命令2
说明:命令1返回真(即返回0,成功被执行)后,命令2才能够被执行
例:/apps/bin目录将会被移到/apps/dev/bin目录下,如果它没有被成功的执行,就不会删除/apps/bin目录
mv /apps/bin /apps/dev/bin && rm -r /apps/bin
||
格式:命令1 || 命令2
说明:命令1未执行成功,那么就执行命令2
例: 拷贝文件没成功的话,就显示错误.
cp word.txt word.bak || echo "cp file failed!"
() {}
格式:(命令1;命令2;...) {命令1;命令2;...}
8.控制流结构
if...then...else...fi,case,for,until,while,break,continue
1)返回码
观察:echo $?
退出:exit n (n为一数字)
break n ==>跳出指定的循环个数。如break 2则跳出2个循环
continue ==>跳出循环当前步
2)流控制if...then...else...fi
if condition1
then
command1
elif condition2
then
command2
else
command3
fi
例1:
##############################################
#! /bin/sh
# ifwr
LOGFILE=test.txt
echo $LOGFILE
if [ ! -w "$LOGFILE" ]; then
echo "You cannot write to $LOGFILE " >&2
fi
##############################################
例2:
##############################################
#! /bin/sh
# ifcp
#下面用2>&1重定向标准错误,去除了系统产生的错误和系统输出
if cp myfile myfile.bak >/dev/null 2>&1 ; then
echo "good copy"
else
echo "`basename $0`:error could not copy the files " >&2
fi
##############################################
例3:
##############################################
#! /bin/sh
# ifcp
#将脚本参数传入系统命令
#此处检测目录是否为空
DIRECTORY=$1
if [ "`ls -A $DIRECTORY`" = ""] ; then #也可用 if [$# -lt 1] 来代替判断语句
echo "$DIRECTORY is indeed empty"
else
echo "$DIRECTORY is not empty " >&2
fi
##############################################
例4:
##############################################
#! /bin/sh
# ifmkdir
#将脚本参数传入系统命令
#此处检测目录是否为空
DIRECTORY=$1
if [ "$DIRECTORY" = ""] ; then
echo "Usage: `basename $0` directory to create"
exit 1
fi
if [ -d $DIRECTORY ]
then : # do nothing
else
echo "The directory does exist"
echo -n "Create it now? [y..n] :"
read ANS
if [ "$ANS" = "y" ] || [ "$ANS" = "Y" ]
then
echo "creating now"
mkdir $DIRECTORY >/dev/null 2>&1
if [ $? != 0 ]; then
echo "Errors createing the directory $DIRECTORY" >&2
exit 1
fi
else : # do nothing
fi
fi
##############################################
3)case控制流
case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。
格式:
==========================================================================
case 值 in
模式1)
命令1
....
;;
模式2)
命令2
....
;;
esac
==========================================================================
注:每一模式必须以右括号结束,取值可以为变量或常数。
匹配发现取值符合某一模式后,其间所有命令开始执行直至“;;”
取值将检测匹配每一个模式,一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。
如果无一匹配模式,使用星号*捕获该值,再接受其他输入
模式部分可能包括元字符,与在命令行文件扩展名例子中使用过的匹配模式类型相同,即
*(任意字符),?(任意单字符),[..](类或范围中任意字符)
例1:
##############################################
#! /bin/sh
# caseterm
echo "choices are..vt100,vt102,vt220"
echo -n "enter your terminal type :"
read TERMINAL
case $TERMINAL in
vt100|vt102) TERM=vt100
;;
vt220) TERM=vt220
;;
*) echo "`basename $0`:Unknow response" >&2
echo "setting it to vt100 anyway,so there"
TERM=vt100
;;
esac
export TERM
echo "Your terminal is set to $TERM"
##############################################
例2:
##############################################
#! /bin/sh
# caseparam
if [ $# !=1 ] ; then
echo "Usage:`basename $0` [start|stop|help]" >&2
exit 1
fi
#assign the parameter to the variable OPT
OPT=$1
case $OPT in
start) echo "starting..`basename $0`"
;;
stop) echo "stopping..`basename $0`"
;;
help)
;;
*) echo "Usage:`basename $0` [start|stop|help]"
;;
esac
##############################################
4)循环
for格式
==========================================================================
for 变量名 in 列表
do
命令1
命令2
.....
命令n
done
==========================================================================
注:列表可以包含替换,字符串和文件名
例1:
##############################################
#! /bin/sh
# for_i
for loop in 1 2 3 4 5 #for loop in "orange red blue grey"
do
echo $loop
done
##############################################
例2:
##############################################
#! /bin/sh
# for_ls
for loop in `ls `
do
echo $loop
done
##############################################
例3:
#for params,不使用in列表选项时,实际上等价于
#for params in "$@" 或
#for params in "$*"
##############################################
#! /bin/sh
# for_param
for loop in "$@" # 也可以是"$*," 这可以从命令行中取得参数
do
echo $loop
done
##############################################
until(不常用)格式
==========================================================================
until 条件
do
命令1
命令2
.....
命令n
done
==========================================================================
例1:监视文件系统容量,当它达到一定水平时通知超级用户
##############################################
#! /bin/sh
# until_mon
LOOK_OUT=`df | grep /logs | awk '{print $5}' | sed 's/%//g'`
echo $LOOK_OUT
until ["$LOOK_OUT" -gt "90" ]
do
echo "Filesystem..logs is nearly full" | mail root
exit 0
done
##############################################
while格式
==========================================================================
while 命令
do
命令1
命令2
.....
命令n
done
==========================================================================
例1:从文件中读取数据,使用重定向以保证从文件中读取数据
#########################################################################
#! /bin/sh | SAVEDIFS=$IFS
# whileread | IFS=:
while read LINE | while read NAME DEPT ID
do | do
echo $LINE | echo -e "$NAME\t $DEPT\t $ID"
done <names.txt | done <names.txt
| IFS=$SAVEDIFS
#########################################################################
上面右边使用IFS将域分隔符改为;号而不是空格或tab键
测试数据names.txt:
Louise Conrad:Accounts:Acc889
Peter James:Payroll:PR483
#########################################################################
死循环格式
while :
do
命令
done
例2:
#########################################################################
#! /bin/sh
# menu
#set the date,user and hostname up
MYDATE=`date +%d/%m/%Y`
THIS_HOST=`hostname -s`
USER=`whoami`
#loop forever !
while :
do
# clear the screen
tput clear
# here documents starts here
cat <<MAYDAY
---------------------------------------------------------------------------
User:$USER Host:$THIS_HOST Date:$MYDATE
---------------------------------------------------------------------------
1 : List files in current directory
2 : Use the vi editor
3 : See who is on the system
H : Help screen
Q : Exit Menu
---------------------------------------------------------------------------
MADAY
# here document finished
echo -e "\tYour Choice [1,2,3,H,Q] >"
read CHOICE
case $CHOICE in
1) ls
;;
2) vi
;;
3) who
;;
H|h)
cat <<MAYDAY
this is the help screen,nothing here yet to help you !
MAYDAY
;;
Q|q) exit 0
;;
*) echo -e "\t\007Unknown user response"
;;
esac
echo -e -n "\tHit the return key to continue"
read DUMMY
done
#########################################################################
等我总结完了,后面又翻了一本书《Linux 编程命令详解》第二版,Richard Petersen著,梁普选,刘玉芬 等译,2001年由电子工业出版社出版的,这本书总结得更好了。呵呵,看来,凡事都是有个过程的。
===================================================================
特殊符号的总结
1、{} 大括号:
用法一:通配符扩展
eg: ls my_{finger,toe}s
这条命令相当于如下命令的组合:
ls my_fingers my_toes
eg: mkdir {userA,userB,userC}-{home,bin,data}
我们将得到 userA-home, userA-bin, userA-data, userB-home, userB-bin,userB-data,userC-home, userC-bin, userC-data,这几个目录
用法二:可用于语句块的构造,语句之间用回车隔开。如果你想在某些使用单个语句的地方(比如在AND或OR列表中)使用多条语句,你可以把它们括在花括号{}中来构造一个语句块。
eg:
{
grep -v "$cdcatnum" $strack_file > $temp_file
cat $temp_file > $strack_file
echo
cat -n file1
} (注:以上大括号中的四句命令够成了一个语句块)
用法三:参数扩展
${name:-default} 使用一个默认值(一般是空值)来代替那些空的或者没有赋值的变量name;
${name:=default}使用指定值来代替空的或者没有赋值的变量name;
${name:?message}如果变量为空或者未赋值,那么就会显示出错误信息并中止脚本的执行同时返回退出码1。
${#name} 给出name的长度
${name%word} 从name的尾部开始删除与word匹配的最小部分,然后返回剩余部分
${name%%word} 从name的尾部开始删除与word匹配的最长部分,然后返回剩余部分
${name#word} 从name的头部开始删除与word匹配的最小部分,然后返回剩余部分
${name##word} 从name的头部开始删除与word匹配的最长部分,然后返回剩余部分
(注,name为变量名,word为要匹配的字符串)
用法三在处理字符串和未知变量时,是很有用的。
2、[] 中括号:
用法一:通配符扩展:
允许匹配方括号中任何一个单个字符
eg: ls /[eh][to][cm]*
相当于执行 ls /etc /home(若有/eom目录,就相当于会执行ls /etc /home /eom)
注:在mkdir命令下不能扩展
用法二:用于条件判断符号:
[]符号可理解为指向test命令的一个软链接,所以其用法可完全参照test,将test位置替换为[便可。
eg: if [ "$?" != 0 ] 等价于 if test "$?" != 0
then echo "Executes error"
3、`command` 反引号:`command`与$(command)的含义相同,都是返回当前执行命令的结果
eg: #!/bin/sh
for file in $(ls f*.sh);do
lpr $file
done
exit 0
该例实现了扩展f*.sh给出所有匹配模式的文件的名字。
4、'string' 单引号 和 "string" 双引号
双引号:如果想在定义的变量中加入空格,就必须使用单引号或双引号,
单、双引号的区别在于双引号转义特殊字符而单引号不转义特殊字符
eg: $ heyyou=home
$ echo '$heyyou'
$ $heyyou ($没有转义)
eg: $ heyyou=home
$ echo "$heyyou"
$ home (很明显,$转义了输出了heyyou变量的值)
5、$# 它的作用是告诉你引用变量的总数量是多少;
$$ 它的作用是告诉你shell脚本的进程号;
$* 以一个单字符串显示所有的脚本传递的参数。等价于$1 $2 $3.......;
$@ 与$*基本类似(参见序号7),但在数组赋值时有些不同;
$? 前一个命令的退出码;
$- 显示shell使用的当前选项;
$! 最后一个后台运行的进程ID号。
6、$((...))
语法:对括号内的表达式求值(fantaxy注:千万别乱加入空格)
eg:
#!/bin/sh
x=0
hile [ "$x" -ne 10 ];do
echo $x
x=$(($x+1))
done
exit 0
7、shell中几种特殊的参数变量的引用
$1、$2、$3……${10}、${11}、${12}…… :表示脚本传入的的各个参数,注意当需表示两位数以后的参数时数字要用花括号括起。
$@ 列出所有的参数,各参数用空格隔开
$*: 列出所有的参数,各参数用环境变量IFS的第一个字符隔开
8、命令列表:
AND列表 statement1 && statement2 && statement3 && …:只有在前面所有的命令都执行成功的情况下才执行后一条命令
OR列表 statement1 || statement2 || statement3 || …:允许执行一系列命令直到有一条命令成功为止,其后所有命令将不再被执行
eg:#!/bin/sh
touch file_one
rm -f file_two
if [ -f file_one ] && echo "hello" && [ -f file_two ] && echo " there"
then
echo "in if"
else
echo "in else"
fi
exit 0
上例的输出为:
hello
in else
关于AND列表与OR列表,在逻辑判断中很使用,下面就举一个其最常用的例子:
[ condition ] && command for true || command for false:
当条件为真时,执行commandfor true ,当条件为假时,执行command for false
9、: 冒号:内建空指令,返回值为0
eg: $ :
$ echo $?
$ 0
while: (该语句结构可实现一个无限循环)
10、; 分号: 在 shell 中,担任"连续指令"功能的符号就是"分号"
eg:cd ~/backup ; mkdir startup ; cp ~/.* startup/.
11、# 井号:表示符号后面的是注解文字,不会被执行;
* 匹配文件名中的任何字符,包括字符串;
? 匹配文件名中的任何单个字符。
~ 代表使用者的 home 目录
12、\ 倒斜线:放在指令前,有取消 aliases(别名) 的作用;放在特殊符号前,则该特殊符号的作用消失;放在指令
的最末端,表示指令连接下一行(使得回车符无效,只起换行作用)
14、! 感叹号:通常它代表反逻辑的作用,譬如条件侦测中,用 != 来代表"不等于"
15、** 次方运算:两个星号在运算时代表 "次方" 的意思
eg:let "sus=2**3"
echo "sus = $sus"
$ sus = 8
发表评论
-
Linux终端复用神器-Tmux使用梳理(程序员适用)
2018-07-06 18:41 609= = = 参考: Linux终 ... -
linux下awk内置函数的使用(split/substr/length)
2018-06-14 20:02 641= = = 【转】linux下awk内置函数的使用(s ... -
awk引用外部变量
2018-06-14 19:54 1195= 对引用的文做了格式修改和字符串修正。 增加了自己的 ... -
Linux下解决高并发socket最大连接数所受的各种限制(解除IO限制)
2018-06-01 10:47 3204== = - from:Linux下解决高并发sock ... -
SSH远程会话管理工具-screen使用教程
2018-04-11 18:08 701= 朝花夕拾:screen。尤其在远程一个黑盒,不能有多 ... -
rpm命令总结-rpm常用命令-rpm安装源后怎么删除-yum安装怎么降低版本
2018-04-10 20:39 1357= = = rpm命令总结 参考:http://ma ... -
.repo文件共存与优先级,.repo文件的修改,https的repo改成http
2018-03-29 17:16 1302= .repo文件共存与优先 ... -
yum是很么?repo文件详解,epel简介,yum源的更换,repo和epel区别
2018-03-29 17:12 2448= yum是很么?repo文件详解,epel简介,yum ... -
centos_官方源、镜像源汇总
2018-03-29 16:34 1243= = 站点版 (一)、企业站 ... -
国内yum源的安装(163,阿里云,epel)
2018-03-29 16:20 931= 国内yum源的安装(163,阿里云,epel) ... -
同步文件:sersync+rsync原理及部署
2017-09-05 19:42 1226= = = 一、为什么要用rsync+sersy ... -
无人值守安装操作系统
2017-07-17 16:47 1186= 无人值守安装操作系统,对运维来说,很节约生命。 1 ... -
Linux系统下常用日志分析工具:Logcheck简介
2017-07-17 16:15 1686= = = from:http://os.51cto ... -
linux下logrotate 配置和理解
2017-07-17 16:09 960= = = 对于Linux 的系统安全来说,日志文件 ... -
centos 查看版本(转)
2016-12-23 18:58 500centos 查看版本(转) 有以下命令可以查看 ... -
wget下载https文件
2016-12-01 22:27 1626wget --no-check-certifica ... -
利用Linux命令行进行文本按行去重并按重复次数排序
2016-08-26 19:22 787利用Linux命令行进行文本按行去重并按重复次数排序 ht ... -
【Apache ZooKeeper】命令行zkCli.sh使用指南
2016-07-22 20:32 8657from:http://blog.sina.com. ... -
linux nc命令常用用法
2016-07-22 20:26 916from:http://my.oschina.net/ ... -
如何修改Linux命令提示符
2016-07-22 20:16 838无颜色常用:export $PS1="[\u@\h ...
相关推荐
实验室设备管理系统 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B
PPT高效插件神器推荐-最新发布.zip
数据中心机房是现代信息技术的核心设施,它承载着企业的重要数据和服务,因此,其基础设计与规划至关重要。在制定这样的方案时,需要考虑的因素繁多,包括但不限于以下几点: 1. **容量规划**:必须根据业务需求预测未来几年的数据处理和存储需求,合理规划机房的规模和设备容量。这涉及到服务器的数量、存储设备的容量以及网络带宽的需求等。 2. **电力供应**:数据中心是能源消耗大户,因此电力供应设计是关键。要考虑不间断电源(UPS)、备用发电机的容量,以及高效节能的电力分配系统,确保电力的稳定供应并降低能耗。 3. **冷却系统**:由于设备密集运行,散热问题不容忽视。合理的空调布局和冷却系统设计可以有效控制机房温度,避免设备过热引发故障。 4. **物理安全**:包括防火、防盗、防震、防潮等措施。需要设计防火分区、安装烟雾探测和自动灭火系统,设置访问控制系统,确保只有授权人员能进入。 5. **网络架构**:规划高速、稳定、冗余的网络架构,考虑使用光纤、以太网等技术,构建层次化网络,保证数据传输的高效性和安全性。 6. **运维管理**:设计易于管理和维护的IT基础设施,例如模块化设计便于扩展,集中监控系统可以实时查看设备状态,及时发现并解决问题。 7. **绿色数据中心**:随着环保意识的提升,绿色数据中心成为趋势。采用节能设备,利用自然冷源,以及优化能源管理策略,实现低能耗和低碳排放。 8. **灾难恢复**:考虑备份和恢复策略,建立异地灾备中心,确保在主数据中心发生故障时,业务能够快速恢复。 9. **法规遵从**:需遵循国家和地区的相关法律法规,如信息安全、数据保护和环境保护等,确保数据中心的合法运营。 10. **扩展性**:设计时应考虑到未来的业务发展和技术进步,保证机房有充足的扩展空间和升级能力。 技术创新在数据中心机房基础设计及规划方案中扮演了重要角色。例如,采用虚拟化技术可以提高硬件资源利用率,软件定义网络(SDN)提供更灵活的网络管理,人工智能和机器学习则有助于优化能源管理和故障预测。 总结来说,一个完整且高效的数据中心机房设计及规划方案,不仅需要满足当前的技术需求和业务目标,还需要具备前瞻性和可持续性,以适应快速变化的IT环境和未来可能的技术革新。同时,也要注重经济效益,平衡投资成本与长期运营成本,实现数据中心的高效、安全和绿色运行。
Visio软件全套资源及教程-最新发布.zip
2000-2022年中国地级市生态韧性数据集(含原始数据、计算代码及结果,最新).zip
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源内容地址:https://blog.csdn.net/abc6838/article/details/143778060 2、数据特点:今年全新,手工精心整理,放心引用,数据来自权威,且标注《数据来源》,相对于其他人的控制变量数据准确很多,适合写论文做实证用 ,不会出现数据造假问题 3、适用对象:大学生,本科生,研究生小白可用,容易上手!!! 4、课程引用: 经济学,地理学,城市规划与城市研究,公共政策与管理,社会学,商业与管理
Jupyter-Notebook
1949-2021年中国民政统计年鉴-最新数据发布.zip
Jupyter-Notebook
Gartner推荐全球4家专注于通过自动化和人工智能支持SOC的优秀供应商.pdf
Jupyter-Notebook
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
53朱清清 劳动教育总结报告.doc
Jupyter-Notebook
Spss26统计软件最新版-最新发布.zip
【作品名称】:基于springboot mybatis+Mysql 实现的图书管理系统 【web课程设计 】 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 主要功能 登录、注销、修改密码 管理员对图书信息的增删改查、查看读者、查看借阅记录 读者对图书信息的查看查询、修改个人信息、查看借阅记录 使用技术 数据库:mysql5.7 后端框架: SpringBoot HTML模板: ThymeLeaf 持久层: Mybatis UI: Bootstrap 登录验证和用户权限: SpringSecurity 使用说明 本项目使用maven进行管理,详细安装教程自行百度 需下载mysql图形化管理工具(例如Navicat),新建数据库library,右键数据库运行项目中的library.sql脚本 用IDE打开项目(建议使用i 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础看懂代码,自行调试代码并解决报错,能自行添加功能修改代码。
内容概要:本文详细介绍了用Python的Tkinter库创建动态心脏图形的过程。程序主要由几个部分组成:首先定义了一系列数学函数用于计算心形图的心脏坐标以及散射、收缩效果;然后构建了一个‘BeatingHeart’类来生成不同帧的心跳动画点集;最后,在主函数里调用了这个类的方法绘制出连续的心跳图像,展示了心脏的搏动过程。 适合人群:熟悉Python语言并且对Tkinter库有一定了解的开发者,特别是那些希望利用Python创建图形化应用或者动画模拟的人群。 使用场景及目标:适用于希望快速理解和实现基于Tkinter的基本二维图形与动画制作的学习者或开发者;同时也可以作为图形算法和物理模拟(如粒子系统)的教学案例。 阅读建议:本文涉及到多个函数之间的复杂调用关系,读者需要仔细跟踪每一步操作的具体意义及其参数含义。对于初学者而言,可以先尝试运行示例代码查看实际效果,然后再逐步理解每个部分的功能实现机制。
宏观面板数据整合(省市区三级)-最新数据.zip
空间计量软件及学习资料-最新更新.zip