小妖女 发表于 2015-1-14 20:18:53

带来一篇Shell经常使用技能 Bash Shell编程

如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!BashShell编程:

1.读取用户变量:
read下令是用于从终端大概文件中读取输出的内建下令,read下令读取整行输出,每行开端的换行符不被读进。在read下令前面,假如没有指定变量名,读取的数据将被主动赋值给特定的变量REPLY。上面的列表给出了read下令的经常使用体例:
下令格局形貌readanswer从尺度输出读取输出并赋值给变量answer。readfirstlast从尺度输出读取输出到第一个空格大概回车,将输出的第一个单词放到变量first中,并将该行其他的输出放在变量last中。read从尺度输出读取一行并赋值给特定变量REPLY。read-aarrayname把单词清单读进arrayname的数组里。read-pprompt打印提醒,守候输出,并将输出存储在REPLY中。read-rline同意输出包括反斜杠。
见上面的示例(绿色高亮局部的文本为把持台手工输出信息):
/>readanswer#守候读取输出,直到回车后暗示输出终了,并将输出赋值给变量answer
Hello#把持台输出Hello
/>echo$answer#打印变量
Hello

#守候一组输出,每一个单词之间利用空格离隔,直到回车停止,并分离将单词顺次赋值给这三个读进变量。
/>readonetwothree
123#在把持台输出123,它们之间用空格离隔。
/>echo"one=$one,two=$two,three=$three"
one=1,two=2,three=3

/>read#守候把持台输出,并将了局赋值给特定内置变量REPLY。
ThisisREPLY#在把持台输出该行。
/>echo$REPLY#打印输入特定内置变量REPLY,以确认是不是被准确赋值。
ThisisREPLY

/>read-p"Enteryourname:"#输入"Enteryourname:"文本提醒,同时守候输出,并将了局赋值给REPLY。
Enteryouname:stephen#在提醒文本以后输出stephen
/>echo$REPLY
stephen

#守候把持台输出,并将输出信息视为数组,赋值给数组变量friends,输出信息用空格离隔数组的每一个元素
/>read-afriends
TimTomHelen
/>echo"Ihave${#friends}friends"
Ihave3friends
/>echo"Theyare${friends},${friends}and${friends}."
TheyareTim,TomandHelen.

2.形态判别:
test是Shell中供应的内置下令,次要用于形态的查验,假如了局为0,暗示乐成,不然暗示失利。见以下示例:
/>name=stephen
/>test$name!=stephen
/>echo$?
1
必要注重的是test下令不撑持Shell中供应的各类通配符,如:
/>test$name=tephen
/>echo$?
1
test下令还能够中括号予以交换,其语义坚持稳定,如:
/>[$name=stephen]
/>echo$?
0
在Shell中还供应了别的一种用于形态判别的体例:[],和test分歧的是,该体例中的表达式撑持通配符,如:
/>name=stephen
/>[[$name==tephen]]
/>echo$?
0
#在[]中,expression能够包括&&(逻辑与)和||(逻辑或)。
/>[[$name==tephen&&$friend=="Jose"]]
/>echo$?
1
/>shopt-sextglob#翻开Shell的扩大婚配形式。
/>name=Tommy
#"o+(m)y"的寄义为,以T或t开首,前面随着一个o,再随着一个大概多个m,最初以一个y开头。
/>[[$name==o+(m)y]]
/>echo$?
0
在Shell中还供应了let下令的判别体例:((expr)),该体例的expr局部,和C言语供应的表达式划定规矩分歧,如:
/>x=2
/>y=3
/>((x>2))
/>echo$?
1
/>((x<2))
/>echo$?
0  
/>((x==2&&y==3))
/>echo$?
0
/>((x>2||y<3))
/>echo$?
1
上面的表格是test下令撑持的操纵符:
判别操纵符判别为真的前提字符串判别stringA即是stringBstringA即是stringBstringA不即是stringBstring不为空[-zstring]string长度为0[-nstring]string长度不为0逻辑判别stringA和stringB都是真stringA或stringB是真[!string]string不为真逻辑判别(复合判别)[]pattern1和pattern2都是真[pattern1或pattern2是真[[!pattern]]pattern不为真整数判别intA即是intBintA不即是intBintA年夜于intBintA年夜于即是intBintA小于intBintA小于即是intB文件判别中的二进制操纵fileA比fileB新fileA比fileB旧fileA和fileB有不异的装备大概inode值文件查验[-d$file]or[[-d$file]]file为目次且存在时为真[-e$file]or[[-e$file]]file为文件且存在时为真[-f$file]or[[-f$file]]file为非目次一般文件存在时为真[-s$file]or[[-s$file]]file文件存在,且长度不为0时为真[-L$file]or[[-L$file]]file为链接符且存在时为真[-r$file]or[[-r$file]]file文件存在且可读时为真[-w$file]or[[-w$file]]file文件存在且可写时为真[-x$file]or[[-x$file]]file文件存在且可实行时为真注:在逻辑判别(复合判读中),pattern能够包括元字符,在字符串的判别中,pattern2必需被包括在引号中。

let下令撑持的操纵符和C言语中撑持的操纵符完整不异,如:
+,-,*,/,%加,减,乘,除,往模
>>,<<右移和左移
>=,<=,==,!=年夜于即是,小于即是,即是,不即是
&,|,^按位与,或,非
&&,||,!逻辑与,逻辑或和取反
另有其寄义和C言语同等的快速操纵符,如=,*=,/=,%=,+=,-=,<<=,>>=,&=,|=,^=。

3.流程把持语句:
if语句格局以下:
#if语句的前面是Shell下令,假如该下令实行乐成前往0,则实行then前面的下令。
ifcommand
then
command
command
fi
#用test下令测试厥后面expression的了局,假如为真,则实行then前面的下令。
iftestexpression
then
command
fi
#上面的格局和testexpression同等
if
then
command
fi
#上面的两种格局也能够用于判别语句的前提表达式,并且它们也是今朝对照经常使用的两种。
if[]
then
command
fi

if((numericexpression))#let表达式
then
command
fi
见以下示例:
/>cat>test1.sh#从下令行间接编纂test1.sh文件。
echo-e"AreyouOK(y/n)?c"
readanswer
#这里的$answer变量必需要用双引号扩住,不然判别将失利。当变量$answer即是y或Y时,撑持上面的echo下令。
if["$answer"=y-o"$answer"=Y]
then
echo"Gladtoseeit."
fi
CTRL+D
/>../test1.sh
AreyouOK(y/n)?y
Gladtoseeit.
下面的判别还能够交换为:
/>cat>test2.sh
echo-e"AreyouOK(y/norMaybe)?c"
readanswer
#[[]]复合下令操纵符同意个中的表达式包括元字符,这里输出以y或Y开首的恣意单词,或Maybe都实行then前面的echo。
if[[$answer==*||$answer=Maybe]]
then
echo"Gladtohearit.
fi
CTRL+D
/>../test2.sh
AreyouOK(y/norMaybe)?yes
Gladtohearit.
上面的例子将利用Shell中的扩大通配形式。
/>shopt-sextglob#翻开该扩大形式
/>answer="notreally"
/>if[[$answer=o?(way|treally)]]
>then
>echo"Iamsorry."
>fi
Iamsorry.
关于本示例中的扩大通配符,这里必要给出一个详细的注释。o婚配No或no,?(way|treally)则暗示0个或1个(way或treally),因而answer变量婚配的字符串为No、no、Notreally、notreally、Noway、noway。
上面的示例利用了let下令操纵符,如:
/>cat>test3.sh
if(($#!=2))#同等于[$#-ne2]
then
echo"Usage:$0arg1arg2"1>&2
exit1#exit加入值为0-255之间,只要0暗示乐成。
fi
if(($1<0||$1>30))#同等于[$1-lt0-o$1-gt30]
then
echo"arg1isoutofrange."
exit2
fi
if(($2<=20))#同等于[$2-le20]
then
echo"arg2isoutofrange."
fi
CTRL+D
/>sh./test3.sh
Usage:./test3.sharg1arg2
/>echo$?#Shell剧本的加入值为exit的参数值。
1
/>sh./test3.sh4030
arg1isoutofrange.
/>echo$?
2
上面的示例为怎样在if的前提表达式中查验空变量:
/>cat>test4.sh
if["$name"=""]#双引号就暗示空字符串。
then
echo"nameisnull."
fi
CTRL+D
/>../test4.sh
nameisnull.

if/elif/else语句的利用体例和if语句极其类似,信任有编程履历的人都不会生疏,这里就不再赘述了,其格局以下:
ifcommand
then
command
elifcommand
then
command
else
command
fi
见以下示例剧本:
/>cat>test5.sh
echo-e"Howoldareyou?c"
readage
if[$age-lt0-o$age-gt120]#同等于((age<0||age>120))
then
echo"Youaresoold."
elif[$age-ge0-a$age-le12]#同等于((age>=0&&age<=12))
then
echo"Youarechild."
elif[$age-ge13-a$age-le19]#同等于((age>=13&&age<=19))
then
echo"Youare13--19yearsold."
elif[$age-ge20-a$age-le29]#同等于((age>=20&&age<=29))
then
echo"Youare20--29yearsold."
elif[$age-ge30-a$age-le39]#同等于((age>=30&&age<=39))
then
echo"Youare30--39yearsold."
else
echo"Youareabove40."
fi
CTRL+D
/>../test5.sh
Howoldareyou?50
Youareabove40.

case语句格局以下:
casevariablein
value1)
command
;;#不异于C言语中case语句内的break。
value2)
command
;;
*)#不异于C言语中switch语句内的default
command
;;
esac
见以下示例剧本:
/>cat>test6.sh
#!/bin/sh
echo-n"Chooseacolor:"
readcolor
case"$color"in
l??)
echo"youselectbluecolor."
;;
ree*)
echo"youselectgreencolor."
;;
red|orange)
echo"youselectredororange."
;;
*)
echo"youselectothercolor."
;;
esac
echo"Outofcasecommand."
/>../test6.sh
Chooseacolor:green
youselectgreencolor.
Outofcasecommand.

4.轮回语句:
BashShell中次要供应了三种轮回体例:for、while和until。
for轮回声明格局:
forvariableinword_list
do
command
done
见以下示例剧本:
/>cat>test7.sh
forscoreinmathenglishphysicschemist#for将轮回读取in前面的单词列表,相似于Java的for-each。
do
echo"score=$score"
done
echo"outofforloop"
CTRL+D
/>../test7.sh
score=math
score=english
score=physics
score=chemist
outofforloop

/>cat>mylist#机关数据文件
tom
patty
ann
jake
CTRL+D
/>cat>test8.sh
#!/bin/sh
forpersonin$(catmylist)#for将轮回读取catmylist下令的实行了局。
do
echo"person=$person"
done
echo"outofforloop."
CTRL+D
/>../test8.sh
person=tom
person=patty
person=ann
person=jake
outofforloop.

/>cat>test9.sh
forfileintest.sh#for将读取test1-test8,后缀为.sh的文件
do
if[-f$file]#判别文件在以后目次是不是存在。
then
echo"$fileexists."
fi
done
CTRL+D
/>../test9.sh
test2.shexists.
test3.shexists.
test4.shexists.
test5.shexists.
test6.shexists.
test7.shexists.
test8.shexists.

/>cat>test10.sh
fornamein$*#读取剧本的下令行参数数组,还能够写成forname的简化情势。
do
echo"Hi,$name"
done
CTRL+D
/>../test10.shstephenann
Hi,stephen
Hi,ann

while轮回声明格局:
whilecommand#假如command下令的实行了局为0,或前提判别为真时,实行轮回体内的下令。
do
command
done
见以下示例剧本:
/>cat>test1.sh
num=0
while((num<10))#同等于[$num-lt10]
do
echo-n"$num"
letnum+=1
done
echo-e"
Heresoutofloop."
CTRL+D
/>../test1.sh
0123456789
Heresoutofloop.

/>cat>test2.sh
go=start
echoTypeqtoquit.
while[[-n$go]]#同等于[-n"$go"],如利用该作风,$go必要被双引号括起。
do
echo-nHowareyou.
readword
if[[$word==]]#同等于["$word"=Q-o"$word"=q]
then
echoBye.
go=#将go变量的值置空。
fi
done
CTRL+D
/>../test2.sh
Howareyou.Hi
Howareyou.q
Bye.

until轮回声明格局:
untilcommand#其判别前提和while恰好相反,即command前往非0,或前提为假时实行轮回体内的下令。
do
command
done
见以下示例剧本:
/>cat>test3.sh
untilwho|grepstephen#轮回体内的下令将被实行,直到stephen登录,即grep下令的前往值为0时才加入轮回。
do
sleep1
echo"Stephenstilldoesntlogin."
done
CTRL+D

shift下令声明格局:shift
shift下令用来把剧本的地位参数列表向左挪动指定的位数(n),假如shift没有参数,则将参数列表向左挪动一名。一旦移位产生,被移出列表的参数就被永久删除。一般在while轮回中,shift用来读取列表中的参数变量。
见以下示例剧本:
/>setstephenannsherylmark#设置4个参数变量。
/>shift#向左挪动参数列表一次,将stephen移出参数列表。
/>echo$*
annsherylmark
/>shift2#持续向左挪动两位,将sheryl和ann移出参数列表
/>echo$*
mark
/>shift2#持续向左挪动两位,因为参数列表中只要mark了,因而本次挪动失利。
/>echo$*
mark

/>cat>test4.sh
while(($#>0))#同等于[$#-gt0]
do
echo$*
shift
done
CTRL+D
/>../test4.shabcde
abcde
bcde
cde
de
e

break下令声明格局:break
和C言语分歧的是,Shell中break下令照顾一个参数,便可以指定加入轮回的层数。假如没有指定,其举动和C言语一样,即加入最内层轮回。假如指定轮回的层数,则加入指定层数的轮回体。假如有3层嵌套轮回,个中最外层的为1,两头的为2,最内里的是3。
见以下示例剧本:
/>cat>test5.sh
whiletrue
do
echo-n"Areyoureadytomoveon?"
readanswer
if[[$answer==]]
then
break
else
echo"Comeon."
fi
done
echo"Hereweare."
CTRL+D
/>../test5.sh
Areyoureadytomoveon?y
Hereweare

continue下令声明格局:continue
和C言语分歧的是,Shell中continue下令照顾一个参数,便可以跳转到指定层级的轮回顶部。假如没有指定,其举动和C言语一样,即跳转到最内层轮回的顶部。假如指定轮回的层数,则跳转到指定层级轮回的顶部。假如有3层嵌套轮回,个中最外层的为3,两头的为2,最内里的是1。
/>catmaillist#测试数据文件maillist的内容为以下信息。
stephen
ann
sheryl
mark

/>cat>test6.sh
fornamein$(catmaillist)
do
if[[$name==stephen]];then
continue
else
echo"Hello,$name."
fi
done
CTRL+D
/>../test6.sh
Hello,ann.
Hello,sheryl.
Hello,mark.

I/O从头定向和子Shell:
文件中的输出能够经由过程管道从头定向给一个轮回,输入也能够经由过程管道从头定向给一个文件。Shell启动一个子Shell来处置I/O从头定向和管道。在轮回停止时,轮回外部界说的任何变量关于剧本的其他局部来讲都是不成见的。
/>cat>demodata#为上面的剧本机关测试数据
abc
def
ghi
CRTL+D
/>cat>test7.sh
if(($#<1))#假如剧本参数的数目小于1,则给堕落误提醒前进出。
then
echo"Usage:$0filename">&2
exit1
fi
count=1
cat$1|whilereadline#参数一中的文件被cat下令输入后,经由过程管道逐行输入给whilereadline。
do
let$((count==1))&&echo"Processingfile$1...">/dev/tty#该行的echo将输入到以后终端窗口。
echo-e"$count        $line"#将输入行号和文件中该行的内容,两头用制表符离隔。
letcount+=1
done>outfile#将while轮回中一切的输入,除>/dev/tty以外,别的的全体输入到outfile文件。
CTRL+D
/>../test7.shdemodata#只要一行输入,其他的都输入到outfile中了。
Processingfiledemodata...
/>catoutfile
1abc
2def
3ghi

/>cat>test8.sh
foriin972354
do
echo$i
done|sort-n#间接将echo的输入经由过程管道重定向sort下令。
CTRL+D
/>../test8.sh
2
3
4
5
7
9

5.IFS和轮回:
Shell的外部域分开符能够是空格、制表符和换行符。它能够作为下令的分开符用在比方read、set和for等下令中。假如在列表中利用分歧的分开符,用户能够本人界说这个标记。在修正之前将IFS原始标记的值保留在别的一个变量中,如许在必要的时分还能够复原。
见以下示例剧本:
/>cat>test9.sh
names=Stephen:Ann:Sheryl:John#names变量包括的值用冒号分开。
oldifs=$IFS#保存原有IFS到oldifs变量,便于前面的复原。
IFS=":"
forfriendsin$names#这是遍历以冒号分开的names变量值。
do
echoHi$friends
done
IFS=$oldifs#将IFS复原为原本的值。
setJerryTomAngela
forclassmatesin$*#再以原有IFS的值变量参数列表。
do
echoHello$classmates
done
CTRL+D
/>../test9.sh
HiStephen
HiAnn
HiSheryl
HiJohn
HelloJerry
HelloTom
HelloAngela

6.函数:
Shell中函数的本能机能和上风和C言语或别的开辟言语基础不异,只是语法格局上的一些差别。上面是Shell中利用函数的一些基础划定规矩:
1)函数在利用前必需界说。
2)函数在以后情况下运转,它和挪用它的剧本同享变量,并经由过程地位参量传送参数。而该地位参量将仅限于该函数,不会影响到剧本的别的中央。
3)经由过程local函数能够在函数内创建当地变量,该变量在出了函数的感化域以后将不在无效。
4)函数中挪用exit,也将加入全部剧本。
5)函数中的return下令前往函数中最初一个下令的加入形态或给定的参数值,该参数值的局限是0-256之间。假如没有return下令,函数将前往最初一个Shell的加入值。
6)假如函数保留在别的文件中,就必需经由过程source或dot下令把它们装进以后剧本。
7)函数能够递回。
8)将函数从Shell中清空必要实行:unset-ffunction_name。
9)将函数输入到子Shell必要实行:export-ffunction_name。
10)能够像捕获Shell下令的前往值一样猎取函数的前往值,如$(function_name)。
Shell中函数的声明格局以下:
functionfunction_name{command;command;}
见以下示例剧本:
/>cat>test1.sh
functionincrement(){#界说函数increment。
localsum#界说当地变量sum。
let"sum=$1+1"
return$sum#前往值是sum的值。
}
echo-n"Thenumis"
increment5#increment函数挪用。
echo$?#输入increment函数的前往值。
CTRL+D
/>../test1.sh
Thenumis6

7.圈套旌旗灯号(trap):
在Shell步伐运转的时分,大概收到各类旌旗灯号,有的来自于操纵体系,有的来自于键盘,而该Shell在收到旌旗灯号后就立即停止运转。可是在有些时分,你大概其实不但愿在旌旗灯号抵达时,步伐就立即中断运转并加入。而是他能但愿疏忽这个旌旗灯号而一向在运转,大概在加入前作一些扫除操纵。trap下令就同意你把持你的步伐在收到旌旗灯号今后的举动。
其格局以下:
trapcommand;commandsignal-number
trapcommand;commandsignal-name
trapsignal-number
trapsignal-name
前面的两种情势次要用于旌旗灯号复位,即规复处置该旌旗灯号的缺省举动。还必要申明的是,假如trap前面的下令是利用单引号括起来的,那末该下令只要在捕捉到指定旌旗灯号时才被实行。假如是双引号,则是在trap设置时就能够实行变量和下令交换了。
上面是体系给出的旌旗灯号数字和旌旗灯号称号的对比表:
1)SIGHUP2)SIGINT3)SIGQUIT4)SIGILL5)SIGTRAP6)SIGABRT7)SIGBUS8)SIGFPE
9)SIGKILL10)SIGUSR111)SIGEGV12)SIGUSR213)SIGPIPE14)SIGALRM15)SIGTERM17)SIGCHLD
18)SIGCONT19)SIGSTOP......
见以下示例剧本:
/>traprmtmp*;exit11215#该下令暗示在收到旌旗灯号1、2和15时,该剧本将先实行rmtmp*,然后exit1加入剧本。
/>trap2#当收到旌旗灯号2时,将规复为之前的举措,即加入。
/>trap""12#当收到旌旗灯号1和2时,将疏忽这两个旌旗灯号。
/>trap-#暗示规复一切旌旗灯号处置的原始值。
/>traptrap22#在第一次收到旌旗灯号2时,实行trap2,这时候将旌旗灯号2的处置规复为缺省形式。在收到旌旗灯号2时,Shell步伐加入。
/>cat>test2.sh
trapecho"Control+Cwillnotterminate$0."2#捕捉旌旗灯号2,即在键盘上按CTRL+C。
trapecho"Control+willnotterminate$0."3#捕捉旌旗灯号3,即在键盘上按CTRL+。
echo"Enterstoptoquitshell."
whiletrue#无穷轮回。
do
echo-n"GoGo...."
read
if[[$REPLY==top]]#直到输出stop或Stop才加入轮回和剧本。
then
break
fi
done
CTRL+D
/>../test2.sh
Enterstoptoquitshell.
GoGo....^CControl+Cwillnotterminate-bash.
^Control+willnotterminate-bash.
stop

8.用getopts处置下令行选项:
这里的getopts下令和C言语中的getopt几近是分歧的,由于剧本的地位参量在有些时分是生效的,如ls-lrt等。这时候候-ltr城市被保留在$1中,而我们实践必要的则是三个睁开的选项,即-l、-r和-t。见以下带有getopts的示例剧本:
/>cat>test3.sh
#!/bin/sh
whilegetoptsxyoptions#x和y是正当的选项,而且将-x读进到变量options中,读进时会将x后面的横线往失落。
do
case$optionsin
x)echo"youentered-xasanoption";;
y)echo"youentered-yasanoption";;
esac
done
/>./test3.sh-xy
youentered-xasanoption
youentered-yasanoption
/>./test3.sh-x
youentered-xasanoption
/>./test3.sh-b#假如输出不法选项,getopts会把毛病信息输入到尺度毛病。
./test3.sh:illegaloption--b
/>./test3.shb#该下令不会有实行了局,由于b的后面有没横线,因而长短法选项,将会招致getopts中断处置并加入。

/>cat>test4.sh
#!/bin/sh
whilegetoptsxyoptions2>/dev/null#假如再呈现选项毛病的情形,该重定向会将毛病输入到/dev/null。
do
case$optionsin
x)echo"youentered-xasanoption";;
y)echo"youentered-yasanoption";;
?)echo"Only-xand-yarevalidoptions"1>&2#?暗示一切毛病的选项,即非-x和-y的选项。
esac
done
/>../test4.sh-g#碰到毛病的选项将间接实行?)内的代码。
Only-xand-yarevalidoptions
/>../test4.sh-xg
youentered-xasanoption
Only-xand-yarevalidoptions

/>cat>test5.sh
#!/bin/sh
whilegetoptsxyz:arguments2>/dev/null#z选项前面的冒号用于提醒getopts,z选项前面必需有一个参数。
do
case$argumentsin
x)echo"youentered-xasanoption.";;
y)echo"youentered-yasanoption.";;
z)echo"youentered-zasanoption."#z的前面会紧跟一个参数,该参数保留在内置变量OPTARG中。
echo"$OPTARGis$OPTARG.";
;;
?)echo"Usageopts4[-xy][-zargument]"
exit1;;
esac
done
echo"Thenumberofargumentspassedwas$(($OPTIND-1))"#OPTIND保留一下将被处置的选项的地位,他是永久比实践下令行参数多1的数。
/>./test5.sh-xyzfoo
youentered-xasanoption.
youentered-yasanoption.
youentered-zasanoption.
$OPTARGisfoo.
Thenumberofargumentspassedwas2
/>./test5.sh-x-y-zboo
youentered-xasanoption.
youentered-yasanoption.
youentered-zasanoption.
$OPTARGisboo.
Thenumberofargumentspassedwas4

9.eval下令与下令行剖析:
eval下令能够对下令行求值,做Shell交换,并实行下令行,一般在一般下令行剖析不克不及满意请求时利用。
/>setabcd
/>echoThelastargumentis$$#
Thelastargumentis$4
/>evalechoThelastargumentis$$##eval下令先辈行了变量交换,以后再实行echo下令。
Thelastargumentisd


如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!

简单生活 发表于 2015-1-15 22:39:11

带来一篇Shell经常使用技能 Bash Shell编程

其实当你安装了一个完整的Linux系统后其中已经包含了一个强大的帮助,只是可能你还没有发现和使用它们的技巧。

第二个灵魂 发表于 2015-1-20 22:13:32

感谢老师和同学们在学习上对我的帮助。

分手快乐 发表于 2015-1-30 07:26:09

这也正是有别的OS得以存在的原因,每个系统都有其自身的优点。?

兰色精灵 发表于 2015-2-15 23:50:39

linux鸟哥的私房菜,第三版,基础篇,网上有pdf下的,看它的目录和每章的介绍就行了,这个绝对原创!

若天明 发表于 2015-3-4 21:13:00

另外Linux上也有很多的应用软件,安装运行了这些软件后,你就可以在Linux上编辑文档、图?片,玩游戏、上网、播放多媒体文件等。

admin 发表于 2015-3-11 21:15:17

随着实验课程的结束,理论课也该结束了,说实话教OS的这两位老师是我们遇到过的不错的老师(这话放这可能不太恰当).

小妖女 发表于 2015-3-19 16:59:22

一定要养成在命令行下工作的习惯,要知道X-window只是运行在命令行模式下的一个应用程序。在命令行下学习虽然一开始进度较慢。

仓酷云 发表于 2015-3-30 00:43:28

熟悉并掌握安装Linux,安装是学习的前提。目前较常见的安装方法有二种:
页: [1]
查看完整版本: 带来一篇Shell经常使用技能 Bash Shell编程