当前位置:文档之家› shell编程基础

shell编程基础

shell编程基础
shell编程基础

SHELL编程基础2009-09-08 12:36:45

分类: Python/Ruby

SHELL编程基础

一、用户登陆进入系统后的系统环境变量:

$HOME 使用者自己的目录

$PATH 执行命令时所搜寻的目录

$TZ 时区

$MAILCHECK 每隔多少秒检查是否有新的信件

$PS1 在命令列时的提示号

$PS2 当命令尚未打完时,Shell 要求再输入时的提示号

$MANPATH man 指令的搜寻路径

二、特殊变量:

$0 这个程序的执行名字

$n 这个程序的第n个参数值,n=1..9

$*($@) 这个程序的所有参数

$# 这个程序的参数个数

$$ 这个程序的PID

$! 执行上一个指令的PID

$? 执行上一个指令的返回值

while getopts D:h options

do

case $options in

D) curdate=$OPTARG;;

h) echo 'USAG: CMD parameter'

exit 0;;

esac

done $OPTARG :代表的参数

$OPTIND: 命令+参数个数 shift n 向前移动n各参数;n+1: $1, n+2: $2 ...$#=$#-n

三、shell中的变元:

* 任意字符串

? 一个任意字符

[abc] a, b, c三者中之一

[a-n] 从a到n的任一字符

四、几个特殊字符表示

\b 退回

\c 打印一行时没有换行符这个我们经常会用到

\f 换页

\r 回车

\t 制表

\v 垂直制表

\\ 反斜线本身

五、判断文件的属性

格式:-操作符 filename

-e 文件存在返回1,否则返回0

-r 文件可读返回1,否则返回0

-w 文件可写返回1,否则返回0

-x 文件可执行返回1,否则返回0

-o 文件属于用户本人返回1, 否则返回0

-z 文件长度为0返回1, 否则返回0.

-f 文件为普通文件返回1, 否则返回0

-d 文件为目录文件时返回1, 否则返回0

六、测试字符串

字符串1 = 字符串2 当两个字串相等时为真

字符串1 != 字符串2 当两个字串不等时为真

-n 字符串当字符串的长度大于0时为真-z 字符串当字符串的长度为0时为真字符串当串字符串为非空时为真

七、测试两个整数关系

数字1 -eq 数字2 两数相等为真

数字1 -ne 数字2 两数不等为真

数字1 -gt 数字2 数字1大于数字2为真

数字1 -ge 数字2 数字1大于等于数字2为真

数字1 -lt 数字2 数字1小于数字2为真

数字1 -le 数字2 数字1小于等于数字2为真

八、逻辑测试

-a 与

-o 或

! 非

九,内部变量

$# 参数个数,从0开始计数

$* shell的所有参数

$@ 类似$*,具体请参看文章

https://www.doczj.com/doc/6a1983595.html,/viewthread.php?tid=218853&extra=&page=7

$- shell用的选择项

$? 上次执行的命令的返回值

$$ shell的进程标识符

$! 用&启动的最后一个命令的进程标识符

$HOME cd命令的缺省参数

$IFS 参数分隔词的字符表

$MAIL 信件文件,当其改变时给出信息you have mail ... 没用过这个^_^ $PATH 搜索命令的目录表

$PS1 提示符串,缺省为$

$PS2 后继命令行提示符串,缺省为>

今天介绍shell元字符的引用

===============================

> prog > file 将标准输出重定向到文件

>> prog >> file 将标准输出附加到文件

< prog < file 从文件file中获取标准输入

| p1 | p2 将p1的标准输出作为p2的标准输入

<

? 匹配文件名中的任何单个字符

[abc] 匹配文件名中abc范围内的任何字符,如0-9或a-z都是合法的

; 命令结束符,例如p1; p2表示先执行p1,再运行p2

& 命令结束符,与 ; 类似,但不等p1结束

`...` 运行...中的命令,输出的结果代替`...`

(...) 在子shell中执行...中的命令

{...} 在当前shell中执行...中的命令(很少使用)

$1,$2等 $0...$9 代表shell文件的参数

$变量 shell变量的值

${变量} 变量的值,为避免在文本连接时混淆

\ \c 将 c 字符作为字符,但 \ 后面加换行符无效

'...' 作为文本,不作任何替换

"..." 在 ... 中的$、`...` 和 \ 得到替换后,将 ... 作为文本

# 表示注释

变量=值为变量赋值

p1&&p2 运行p1;若成功,再运行p2

p1||p2 运行p1;若不成功,再运行p2

下面我一一举列说明

一、$符号

1、echo $? 显示的是上一条指令退出状态

2、echo "$?" 效果同上

3、echo '$?' 显示的是$?

4、echo \$? 显示的是$?

5、echo "\$?" 显示的是$?

大家可能已经看出$符号在双引号中具有特殊意义双引号对$符号不起作用

而单引号可以将特殊字符的的特殊意义屏蔽掉,使其能显示为字符本身,反斜杠也可以将特殊字符的特殊含义屏蔽掉,使特殊字符失去特殊含义。

二、\ 反斜杠

反斜杠的作用是将特殊符号字符的特殊含义屏蔽掉,使其还是原字符

A=1234

echo \$A 显示为$A 如果不加\将显示为1234

echo \` 显示为`

echo \" 显示为双引号

echo \\ 显示为\

三、` 反引号

反引号的功能是命令替换,将反引号中的字符串做为命令来执行,我们在用shell编程时经常用的到将系统命令的执行结果赋给一个变量

A=`date`

echo $A 显示的不是date而是当时的时间串

比如有一文件A的内容如下

ABCDEFG

1234456

abcdefg

B=`cat A|grep 234` # 检索文件A中含有字符串234的行

echo $B 将显示为1234456

echo "$B" 将显示为什么?

echo "\$B" 将显示为什么?读者自己试试

四、" 双引号

在系统中有些特殊字符,为避免引用这些特殊字符往往用双引号或单引号将这些特殊字符引起来,使其不具有特殊含义。

但有一部分特殊字符在引号中还是具有特殊含义,用双引号引起来是不起作用的。本文中所列的前四个特殊字符在双引号中还是特殊字符。为了使其不具有特殊含义一是用单引号引进来二是用\反斜线使其失去作用。

比如我们想原样输出这些特殊字符

echo """

echo "$"

echo "\"

echo "`"

以上不是你所期望的结果,因为双引号对它们不起作用,你只能这样才能输出这些特殊字符的原形

echo '"'

echo '$'

echo '\'

echo '`'

echo "\""

echo "\$"

echo "\\"

echo "\`"

将分别显示为" $ \ `

五、其它特殊字符

大家注意到除了前四个特殊字符外我将其它的特殊字符都放在一块,这是因为前四个特殊字符在双引号中还是具有特殊含义,所以单独拿出来讲,除此以外的特殊字符如果你要输出这些特殊字符的原形,你就可以用双引号或单引号引起来使其失去特殊含义。

< ,>,*,?,[,]对shell有特殊含义但你可以用双引号引起来输入这些原形

讲了这么多大家是不是已经注意到所有的特殊字符在单引号中失去特殊含义,如果你要输出特殊字符原形但又记不清那些特殊字符在双引号中不能输出原形,建议你干脆用单引号引起来。

今天介绍条件测试语句

一、if 条件语句

格式:

if 条件表达式

then #当条件为真时执行以下语句

命令列表

else #为假时执行以下语句

命令列表

fi

if 语句也可以嵌套使用

if 条件表达式1

then

if 条件表达式2

then

命令列表

else

if 条件表达式3

then

命令列表

else

命令列表

fi

fi

else

命令列表

fi

你可以进行多层嵌套一个if语句一定要跟一个fi 表示该层条件结束否则会造成语法错误

结合前面讲的举例如下:

这里先讲一个条件语句中用到的命令test 表示测试test后面的条件是否为真

if test -f "$1"

then

lpr $1

else

if test -d "$1"

then

cd $1

lpr $1

else

echo "$1不是文件或目录"

fi

fi

以上的例子还可以改成如下所示

if test -f "$1"

then

lpr $1

elif test -d "$1" #elif 同else if

then

(cd $1;lpr $1)

else

echo "$1不是文件或目录"

fi

以上的例子不知您是否看懂是什么意思吗?

假如我们现在将这个例子保存为prfile

chmod +x prfile

执行刚才的程序

./prfile aaa

这个例子是检查你的输入的参数是否是一个文件如果是就打印如果是一个目录先转目录再打印如果即不是文件也不是目录给出提示

二、多重条件测试语句case

格式:

case 字串in

模式) 命令列表;;

模式) 命令列表;;

....

esac

多重条件语句是以case 开始以esac结束中间可以有多个条件列表功能是测试字串和里面的模式有没有匹配的,有就执行里面的命令列表模式也可以是*号表示任意字串,每个模式里面的最后要;;双引号结束,否则会发生语法错误。

现举例如下:

case $1 in

*.c)

cc $1

;;

*.txt)

lpr $1

;;

*)

echo "未知的类型"

esac

假如将以上内容保存在文件abc中

chmod +x abc

执行./abc a.c 将会对文件a.c进行编译

执行 ./abc readme.txt 将会把文件通过打印机

假如我将以上内容改一下,你是否会知道它的执行结果?

case $1 in

*)

cc $1

;;

*.txt)

lpr $1

;;

*.c)

echo "未知的类型"

esac

今天介绍循环语句

一. while 循环

while 命令格式

while 条件表

命令表

done

执行过程

shell首先执行条件表,如果条件表的最后一条语句的退出状态为零,则执行循环体内的命令,执行完后,再检查条件表,如果退出状态为零将继续执行,如此循环往复直到条件表的

最后一条语句的退出状态非零. 退出状态为零就是条件为真True.

举例说明假如shell文件的内容如下:

Sum=0

i=0

while true #true是系统的关键词表示真

do

i=`expr $i + 1`

Sum=`expr $Sum + $i`

if [ $i = "100" ]

then

break;

fi

done

echo $i $Sum

最后这个程序显示的是 100 5050

这个程序的运算就是将1到100加起来

下面将这个程序再改动一下

Sum=0

i=0

while [ $i != "100" ]

do

i=`expr $i + 1`

Sum=`expr $Sum + $i`

done

echo $i $Sum

改动后的程序运算结果和上面是一样但程序比上面的要简练

在这个循环中还可以以until做为测试条件它正好与while测试的条件相反,也就是当条件为假时将继续执行循环体内的语句,否则就退出循环体,下面还用这个例子.

Sum=0

i=0

until [ $i = "100" ]

do

i=`expr $i + 1`

Sum=`expr $Sum + $i`

done

echo $i $Sum

当i不等于100时循环就是当条件为假时循环,否则就退出,而第一个例子是当i 不等于100

时循环,也就是测试条件为真时循环.

二.for 循环

命令格式:

for 变量 in 名字列表

do

命令列表

done

这里的名字列表是一个由空格分隔的字符串列表,shell在执行for循环时每次依次从名字表

中取出一个字符串赋给循环变量作为变量的值.

在写for语句时,也可以省略in 名字列表部分,这表示用当前的位置参数来代替

这时的名字列表.

下面举个例子

比如在你的电脑中有两个目录,一个是aa,一个是bb在这两个目录中有5个相同的文件,但其中一个目录中的一个或多个文件刚刚修改过,现在我忘记刚才改的是那几个文件了,那么我靠for循环就知道?程序如下:

for File in a1 a2 a3 a4 a5

do

diff aa/$File bb/$File

done

下面再举一个不带名字列表的例子

for File

do

echo $Filw

done

文件内容保存在a.sh中并可执行

我们在执行这个shell程序时命令行如下:

a.sh a1 a2 a3 a4 a5

执行结果如下:

a1

a2

a3

a4

a5

大家从这个例子中可以看到命令行的参数被逐一读入一次

三.循环控制语句

break 命令不执行当前循环体内break下面的语句从当前循环退出.

continue 命令是程序在本循体内忽略下面的语句,从循环头开始执行.

一,命令组合:圆括号和花括号

shell中有两种方法将命令组合在一起:圆括号和花括号.圆括号使shell创建一个子shell来读取并执行括起来的名命令.左括号和右括号不论出现在命令行中

的什么位置,shell都会认为它们具有特殊的组合意义的.只有用双引号将它们

括起来引用,才表示圆括号或花括号

的原义.例如:

echo a(b)

将出现语法上的错误,要想输出a(b)字符串只能括起来

echo "a(b)"

或echo a"("b")"

这样才能被shell正确解释.

利用组合命令有什么作用呢?

一,用圆括号组合命令

圆括号的组合命令可以创建子进程运行组合程序,建立子进程的功能是很有用的,因为子shell在组合命令中的种种操作都不会影响到当前shell的各变量的值. 例如:

子进程在执行组合命令时改变了工作目录,并在新的工作目录下执行一系例命令,执行完后它可以不必返回原工作目录,因为子进程工作目录的改变不会影响到当前工作目录.

创建子进程后将当前的环境也同样传给子shell,当前shell中用export输出到环境中的各变量在子shell中同样有效.

花括号也可以将命令组合在一起.左右花括号只有作为一条命令的第一个字出现时,shell才含有它们特殊含义.

与圆括号不同的是花括号并不创建子shell,只是由当前的shell来读取并执行括起来的命令.有时用户希望使用一组命令的顺序输出作为另一组命令的输入,此时用花括号是很方便的.

不论是用圆括号不是花括号,退出状态都是等于最后一条括起来的命令的退出状态.

二,可以在当前shell中执行的命令

用户在使用shell时一定要了解那些是可以在当前shell中执行的命令那些不可以在当前shell中执行的命令有:

break case cd continue

echo eval exec exit

export for if read

readonly return set shift

test times trap umask

until wait while

: {}

=============================================================

.chmod

chmod [who] operator [permission] filename

who

u 所有者

g 组

o 其他用户

a 所有用户

operator

+ 增加权限

- 取消权限

= 设定权限

permission

r 读权限

w 写权限

x 执行权限

s 文件属主和组set-ID

l 给文件加锁,使其他用户无法访问

t 粘性位 (如果一个目录上出现粘着位,这就意味着目录中的文件只有其属主才可以删除,即使某个同组用户具有和属主同等的权限。不过有的系统上,这个规则并不严格;如果在文件列表时看到t,则意味着脚本或程序在执行时会被放在交换区(虚存),不过由于当今的内存价格如此这低,大可不必理会文件的t 应用)

示例:

chmod a+x file

chmod og-w file

chmod g+w file

chmod u+x file

chmod go+x file

.suid/guid

chmod u+s file

# ls -l a.html

-rw-r--r-- a.html

# chmod u+s a.html

# ls -l a.html

-rwSr--r-- a.html

.find

find path -options [-print -exec -ok]

-exec find命令将匹配的文件执行exec所给出的shell命令 -exec cmd {} \; (注意: {} 和 \;间的空格)

-ok 同-exec只不过要求对命令的执行进行确认

-name 匹配文件名

find . -name "*.txt" -print

find . -name "[a-z]*" -print

find . -name * -print 或 find . -print

find . -name "[a-z][a-z][0--9][0--9].txt" -print

-perm 匹配权限

find . -perm 755 -print

find . -perm -007 -print

-prune 忽略目录 (如果使用了-depth选项,则忽略-prune选项) [没有试用成

功]

find /apps -name "/apps/bin" -prune -o -print

-user 匹配用户

find . -user cnscn -print

-nouser 帐户属主已被删除的文件

find . -nouser -print

-group

-nogroup

-mtime +-n 按更改时间查找文件

find . -mtime -5 -print 查找5日内更改过的文件

find . -mtime +5 -print 查找5日前更改过的文件

-newer file 查找比file更改时间新的文件

! -newerfile2 查找比file更改时间旧的文件

find . -newer a.txt

find . ! -newer a.txt

# date

2006年 09月 13日星期三 11:16:07 CST

# touch -t 0609120000 a.txt 创建文件a.txt并指定它的更改时间# ls -l a.txt

-rw-r--r-- 1 root root 0 09-12 00:00 a.txt

-type

f

b

d

c

p

l

-maxdepth 指定递归操作的最在目录深度

# find . -maxdepth 1 -type d

.

./tmp

./mrtg-2.14.5

./piano

./tidy4aug00

-mount 仅在当前的文件系统内进行操作

-fstype

-cpio 将查询结果进行cpio命令进行操作

find etc home apps -depth -print | cpio -ivcdC65536 -o /dev/rmt0

-exec cmd {} \;

-ok cmd {} \;

find . -type f -exec ls -l {} \;

find . -type f -exec rm -f {} \;

find . -type f -ok ls -l {} \;

find . -type f -ok rm -f {} \;

-size n[c]

-depth

-follow

.xargs

功能类似 -exec , 但和-exec不同的是它一次只是取得部分find查询到的文件结果,而-exec是一次性获取全部文件结果,容易导致参数太多

# find . -type f -name "*.mp3" -print | xargs ls -l

-rw-r--r-- 1 root root 3985349 09-07 16:05 ./piano/025.mp3

-rw-r--r-- 1 root root 3936256 09-07 16:06 ./piano/duni.mp3 -rw-r--r-- 1 root root 28 09-07 16:23 ./piano/丝丝记忆.mp3

-rw-r--r-- 1 root root 2423745 09-07 16:24 ./piano/异国情.mp3 -rw-r--r-- 1 root root 2967512 09-07 16:20 ./piano/思乡曲.mp3 -rw-r--r-- 1 root root 4567040 09-07 16:20 ./piano/星空.mp3

.echo

echo -n "string..." 不换行输出

echo -e "string...\c" 同上

.read variable1 variable2 从标准输入读内容到变量

# read name

sssssssssss

# echo $name

sssssssssss

.文件重定向

cmd > file 结果输出到文件file

cmd >> file 结果附加到文件file

cmd 1> file 结果输出到文件file

cmd 2> file 标准错误输出到文件file

cmd > file 2>&1 结果和标准错误输出到文件file

cmd < file1 > file2 命令以file1为输入,然后以file2为输出

cmd <>file <> >ssssssss

>ssaaaaaaa

>HERE

cmd <&m 把文件描述符m作为标准输入

cmd >&m 把标准输出重定向到文件描述符m中

cmd <&_ 关闭标准输入

.&&

cmd1 && cmd2 顺序执行命令cmd1和cmd2 (只有cmd1执行成功才会执行cmd2)

.||

cmd1 && cmd2 选择执行cmd1和cmd2(如果cmd1执行失败,则执行cmd2)

awk '{print $1,$2}' acc.qtr >qtr.tmp || echo "Error" #如果前面执行错误,则报告错误

.() 一般很少单独执行而是和&& || 组合运行

(cmd1;cmd2;cmd3...) 在当前shell中执行一组命令

mail ... || (echo "Error" | mail; exit)

.{} 一般很少单独执行而是和&& || 组合运行

{cmd1;cmd2;cmd3...} 在子shell中执行一组命令

.正则表达式

^ 匹配行首

$ 匹配行尾

* 匹配0个或多个前面的单个字符

[] 匹配[]内的任意一个字符

\ 转义

pattern\{n\} 匹配n次pattern

pattern\{n,\} 匹配最少n次pattern

pattern\{n,m\} 匹配n到m次pattern

经常使用的正则表达式

^

$

^[the]

[Ss]igna[lL]

[mayMAY]

^User$

[tty]$ 以tty结尾的行

\.

^d..x..x..x

^[^l]

[.*0]

[000*] 000或更多个

[iI] i或I

[iI][nN] in或iN或In或IN

[^$] 空行

^......$ 含6个字符的行

[a-zA-Z] 任意单个字符

[a-z][a-z]* 到少一个小写字母

[^0-9\$] 非数字或$

[^0-0A-Za-z] 非数字或字母

[123] 1或2或3

[Dd]evice device或Device

De..ce 以De开始中间两个任意字符最后是ce

\^q 以^q开始的行

^.$ 只有一个字符的行

^\.[0-9][0-9] 一个句点和两个数字开始的行

'"Device"' Device

De[Vv]ice\. Device 或 device

[0-9]\{2\}-[0-9]\{2\}-[0-9]\{4\} dd-mm-yyyy

[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\} 匹配IP地址[^.*$] 匹配任意行

.grep

-E 匹配正则表达式

使用例:

Linux Bash Shell快速入门 在线教程

BASH 的基本语法 最简单的例子——Hello World! 关于输入、输出和错误输出 BASH 中对变量的规定(与C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1 最简单的例子——Hello World! 几乎所有的讲解编程的书给读者的第一个例子都是Hello World 程序,那么我们今天也就从这个例子出发,来逐步了解BASH。 用vi 编辑器编辑一个hello 文件如下: #!/bin/bash # This is a very simple example echo Hello World 这样最简单的一个BASH 程序就编写完了。这里有几个问题需要说明一下: 一,第一行的#! 是什么意思 二,第一行的/bin/bash 又是什么意思 三,第二行是注释吗 四,echo 语句 五,如何执行该程序 #! 是说明hello 这个文件的类型的,有点类似于Windows 系统下用不同文件后缀来表示不同文件类型的意思(但不相同)。Linux 系统根据"#!" 及该字串后面的信息确定该文件的类型,关于这一问题同学们回去以后可以通过"man magic"命令及/usr/share/magic 文件来了解这方面的更多内容。在BASH 中第一行的"#!" 及后面的"/bin/bash" 就表明该文件是一个BASH 程序,需要由/bin 目录下的bash 程序来解释执行。BASH 这个程序一般是存放在/bin 目录下,如果你的Linux 系统比较特别,bash 也有可能被存放在/sbin 、/usr/local/bin 、/usr/bin 、/usr/sbin 或/usr/local/sbin 这样的目录下;如果还找不到,你可以用"locate bash" "find / -name bash 2> /dev/null" 或"whereis bash" 这三个命令找出bash 所在的位置;如果仍然找不到,那你可能需要自己动手安装一个BASH 软件包了。 第二行的"# This is a ..." 就是BASH 程序的注释,在BASH 程序中从“#”号(注意:后面紧接着是“!”号的除外)开始到行尾的多有部分均被看作是程序的注释。的三行的echo 语句的功能是把echo 后面的字符串输出到标准输出中去。由于echo 后跟的是"Hello World" 这个字符串,因此"Hello World"这个字串就被显示在控制台终端的屏幕上了。需要注意的是BASH 中的绝大多数语句结尾处都没有分号。 如何执行该程序呢?有两种方法:一种是显式制定BASH 去执行:

linux+shell脚本语言基础知识

linux shell脚本语言基础知识 一.shell简介 Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的界面,更确切的说,shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用Shell脚本编程,完成更加复杂的操作。 shell是一个命令解释器,它从输入设备读取命令,再将其转为计算机可以了解的指令,然后执行它。在linux中,shell又不仅是简单的命令解释器,而且是一个全功能的编程环境。 Linux的Shell种类众多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell (/usr/bin/ksh)、Shell for Root(/sbin/sh),等等。不同的Shell语言的语法有所不同,所以不能交换使用。每种Shell都有其特色之处,基本上,掌握其中任何一种就足够了。通常用Bash,也就是Bourne Again Shell进行编程。 二.shell使用 1.建立和运行shell程序 shell脚本程序:按照一定的语法结构把若干linux命令组织在一起,是这些命令按照我们的要求完成一定的功能。它可以进行类似程序的编写,并且不需要编译就能执行。(只需修改其权限) 像编写高级语言的程序一样,编写shell程序需要一个文本编辑器,如VI和VIM,通常使用VIM文本编辑器,支持更便利的插入模式。 首先使用VIM编辑器编辑一个hello.sh文件: #!/bin/bash #hello world example

Shell脚本编写基础

Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell 是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统的关键。可以说,shell使用的熟练程度反映了用户对Linux使用的熟练程度。 一、什么是shell 当一个用户登录Linux系统之后,系统初始化程序init就为每一个用户运行一个称为shel l(外壳)的程序。那么,shell是什么呢?确切一点说,shell就是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell 来启动、挂起、停止甚至是编写一些程序。 当用户使用Linux时是通过命令来完成所需工作的。一个命令就是用户和shell之间对话的一个基本单位,它是由多个字符组成并以换行结束的字符串。shell解释用户输入的命令,就象DOS里的https://www.doczj.com/doc/6a1983595.html,所做的一样,所不同的是,在DOS中,https://www.doczj.com/doc/6a1983595.html,只有一个,而在Linux下比较流行的shell有好几个,每个shell都各有千秋。一般的Linux系统都将bash作为默认的shell。 二、几种流行的shell 目前流行的shell有ash、bash、ksh、csh、zsh等,你可以用下面的命令来查看你自己的shell类型: #echo $SHELL $SHELL是一个环境变量,它记录用户所使用的shell类型。你可以用命令: #shell-name 来转换到别的shell,这里shell-name是你想要尝试使用的shell的名称,如ash等。这个命令为用户又启动了一个shell,这个shell在最初登录的那个shell之后,称为下级的shell或子shell。使用命令: $exit 可以退出这个子shell。 使用不同的shell的原因在于它们各自都有自己的特点,下面作一个简单的介绍: 1.ash ash shell是由Kenneth Almquist编写的,Linux中占用系统资源最少的一个小shell,它只包含24个内部命令,因而使用起来很不方便。 2.bash bash是Linux系统默认使用的shell,它由Brian Fox和Chet Ramey共同完成,是Bourne Again Shell的缩写,内部命令一共有40个。Linux使用它作为默认的shell是因为它有诸如以下的特色: (1)可以使用类似DOS下面的doskey的功能,用方向键查阅和快速输入并修改命令。 (2)自动通过查找匹配的方式给出以某字符串开头的命令。 (3)包含了自身的帮助功能,你只要在提示符下面键入help就可以得到相关的帮助。 3.ksh ksh是Korn shell的缩写,由Eric Gisin编写,共有42条内部命令。该shell最大的优点是几乎和商业发行版的ksh完全兼容,这样就可以在不用花钱购买商业版本的情况下尝试商业版本的性能了。 4.csh

linu基础shell考试试卷

姓名___________联系方式__________ 中科院测试班linux-基础试卷 一、选择题 1.一个bashshell脚本的第一行是什么() A#!/bin/bashB.#/bin/bashC.#/bin/cshD./bin/bash 2.下面哪个命令是用来定义shell的环境变量() A、exportfsB.aliasC.exportsD.export 3.哪个命令可以将普通用户转换成超级用户() A.super B.passwd C.tar D.su 4.在vi编辑器里,命令"dd"用来删除当前的() A.行 B.变量 C.字 D.字符 5.在一行内运行多个命令需要用什么字符隔开() A.@ B.$ C.; D.* 6.按下()键能终止当前运行的命令 A.Ctrl-C B.Ctrl-F C.Ctrl-B D.Ctrl-D 7.显示用户的主目录的命令是什么?() A.echo$HOME B.echo$USERDIR C.echo$ENV D.echo$ECHO 12.在vi编辑器里,哪个命令能将光标移到第200行() A.g200 B.G200 C.:200 D.200g 8.以下哪个命令可以终止一个用户的所有进程() A.skillall B.skill C.kill D.killall 9vi中哪条命令是不保存强制退出() A.:wq B.:wq! C.:q! D.:quit 10.vi中复制整行的命令是() A.y1 B.yy C.ss D.dd 11.以下对于shell用户变量的定义,不对的是() A.g_Linux= B.LINUX=2.6.30 C 12.在终端里执行echo“currentpath:“‘`pwd`’“”结果是:() A.currentpath:/home/Linux B.current path:’/home/Linux’ C.currentpath:’`pwd`’ D.currentpath:`pwd` 二、填空题 1.对于目录间的切换,跳转到上一级目录使用(),切换到当前用户的家 目录() 2.需要删除目录xx_linux下的所有文件及目录,并无需提示逐一删除, 执行命令为() 3.终端里执行a=100;b=20;echo&[$a+$b];echo$a+$b;结果分别是() () 4.导出历史记录的最近20条记录到cmd.txt文本:() 5、vim进入text.c文件里。在插入模式下,想查找单词word,怎么进行 操作()。

Shell基本语法结构

☆掌握Shell的基本语法结构。 ☆学会编写并执行Shell脚本程序。 ☆学会在Linux下进行进程调度和作业调度 任务一学习变量与表达式 Shell是操作系统最外面的一层,负责管理用户与操作系统之间的交互,例如等待用户输入,向操作系统解释用户的输入,以及处理操作系统的各种输出结果。 除了作为命令解释器之外,Shell本身还是一个解释型的程序设计语言。Shell程序设计语言支持变量、表达式、函数和流程控制结构等,任何在终端能够执行的命令也放到Shell程序。 ● 4.1.1 变量 ●在Shell中有三种变量:系统变量、环境变量和用户变量。其中系统变量在对参数判 断和命令返回值判断会使用,环境变量主要是在程序运行的时候需要设置,用户变量在编程过程中使用最多。 ●这几种变量的赋值方法各不相同,主要有:直接设置变量值、变量之间的置换、从 命令行参数获取、从环境变量获取和用户输入等几种方式。 ●引用变量一般采用“$variable”的形式引用变量variable的值。 1.系统变量 ●Shell常用的系统变量用于提供系统信息。系统变量一般采用命令行参数获取。 2.环境变量 ●Shell在开始执行前就已经定义了一些与系统工作环境有关的变量。 ●显示环境变量用echo命令。 ●在bash中,设置环境变量用set命令。用unset命令可将环境变量重新设置为系统 默认值,。 ●用户并不需要每次登录后都对各种环境变量进行手工设置,通过环境设置文件,用 户的工作环境的设置可以在登录的时候由系统自动来完成。环境设置文件有两种:系统环境设置文件和用户环境设置文件。 ●

3.用户变量 ●不管系统变量和环境变量有多少,对于需求来说,总是不够的。用户常常需要自定 义一些变量,这些变量就称为用户变量。 ●定义用户变量的语法为: ●name=string ●局部变量与全局变量 Shell变量也有其规定的作用范围。局部变量的作用范围仅仅在其命令行所在的Shell 或Shell脚本文件中。全局变量的作用范围则包括本Shell进程及其所有子进程,即相当于环境变量,贯穿于整个当前用户环境。可以使用export命令将局部变量设置为全局变量。 export name=string ●【操作实例4.1】 用文本编辑器gedit编写一个Shell脚本test1.sh,显示执行脚本时输入的参数及参数总数目,并定义一个局部变量和一个全局变量。 4.1.2 表达式 Shell中的表达式分为算术运算表达式、关系与逻辑表达式和正则表达式等几种。 1.expr命令 ●expr命令的功能是求表达式的值。 2. 算术表达式 ●算术表达式可以是由运算符+、-、*、/、=组成的表达式。 3. 关系与逻辑表达式 ●命令test与方括号[ ]都用于进行条件测试,测试的结果返回逻辑值,即真true(0)和 假false(1)。test和[ ]可以相互替换。 ● ●

Shell零基础学习

Shell脚本 1.Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。 Shell 既是一种命令语言,又是一种程序设计语言。 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。 Shell 脚本(shell script),是一种为 shell 编写的脚本程序。 2.Linux 的 Shell 种类众多,常见的有: ?Bourne Shell(/usr/bin/sh或/bin/sh) ?Bourne Again Shell(/bin/bash) ? C Shell(/usr/bin/csh) ?K Shell(/usr/bin/ksh) ?Shell for Root(/sbin/sh) 由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。 在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像#!/bin/sh,它同样也可以改为#!/bin/bash。 #!告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。 3.echo 命令用于向窗口输出文本。 Shell变量 1.定义变量时,变量名不加美元符号($,PHP语言中变量需要) 变量名和等号之间不能有空格 变量名的命名须遵循如下规则: ?命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。 ?中间不能有空格,可以使用下划线(_)。 ?不能使用标点符号。

?不能使用bash里的关键字(可用help命令查看保留关键字)。 2.使用变量 使用一个定义过的变量,只要在变量名前面加美元符号即可,例如: your_name="qinjx" echo $your_name echo ${your_name} 变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界;推荐给所有变量加上花括号,这是个好的编程习惯。 3.只读变量 使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。 语法:readonly your_name 4.删除变量 使用 unset 命令可以删除变量。 语法:unset variable_name 变量被删除后不能再次使用。 unset 命令不能删除只读变量。 5.变量类型 运行shell时,会同时存在三种变量: ?1) 局部变量局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell 启动的程序不能访问局部变量。 ?2) 环境变量所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。 注:必要的时候shell脚本也可以定义环境变量。 ?3) shell变量 shell变量是由shell程序设置的特殊变量。 注:shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行。 Shell字符串

shell基础知识

1,环境 Linux的Shell种类众多,常见的有: Bourne Shell(/usr/bin/sh或/bin/sh) Bourne Again Shell(/bin/bash) C Shell(/usr/bin/csh) K Shell(/usr/bin/ksh) Shell for Root(/sbin/sh) 2,第一个shell 新建一个文件test.sh,扩展名为sh(sh代表shell) #!/bin/bash echo "Hello World !" "#!" 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell 3,shell的运行 1)作为可执行程序 chmod +x ./test.sh #使脚本具有执行权限 ./test.sh #执行脚本 一定要写成./test.sh,而不是test.sh,./test.sh告诉系统说,就在当前目录找 2)作为解释器参数 这种运行方式是,直接运行解释器,其参数就是shell脚本的文件名,如: /bin/sh test.sh /bin/php test.php 这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。 4,shell变量 1)定义变量 your_name="https://www.doczj.com/doc/6a1983595.html," 变量名不加美元符号,变量名和等号之间不能有空格 变量名的命名规则: Linux Shell 基础知识大全加入文库VIP 首个字符必须为字母(a-z,A-Z)。 中间不能有空格,可以使用下划线(_)。 不能使用标点符号。 不能使用bash里的关键字(可用help命令查看保留关键字)。 2)使用变量 your_name="qinjx" echo $your_name echo ${your_name} 加花括号是为了帮助解释器识别变量的边界,推荐给所有变量加上花括号 已定义的变量,可以被重新定义 your_name="tom" echo $your_name your_name="alibaba" echo $your_name 3)只读变量 myUrl="https://www.doczj.com/doc/6a1983595.html,"

Linux-Shell编程从入门到精通学习教程打包下载==

Linux-Shell编程从入门到精通学习教程打包下载==

Linux Shell编程从入门到精通学习教程打包下载 课程目标 我们可以通过本次系列的编程技术学习,掌握企业里面的运维编程必备脚本,同时掌握企业运维到底要求会什么东西,有哪些是我们必须要掌握的知识。适用人群 适合有linux基础知识,想进一步学好linux的各位同学,我也会跟大家一起努力,分享、感恩、成长! 课程简介 【Linux编程视频课程Shell从入门到精通(完整版)】 课程目标: 本套课程适用于初学者以及各类运维人员,我们可以通过本次系列的编程技术学习,掌握企业里面的运维编程必备脚本,同时掌握企业运维到底要求会什么东西,有哪些是我们必须要掌握的知识,为我们的运维能力保驾护航、增值加薪,让我们的运维更加容易,真正做到懒人运维,而不是每天苦逼的搬服务器,每天无奈的去救火! 适合对象: 适合有linux基础知识,想进一步学好linux的各位同学,我也会跟大家一起努力,分享、感恩、成长! 学习条件: 需要有耐心、对自己负责,对自己的人生负责,选择了决定未来,选择了就全力以赴去行动,相信结果值得拥有! 学习宣言:

让我们乘着Linux的大船,奔向我们未来的方向!期待以及祝愿同学们每个人都有好的收获,每天都有新的起点!人人都能学会我们的linux下Shell 编程。 课程 1 Linux下Shell编程基础入门 [免费观看] 14分钟 说到Shell编程,我想很多从事Linux运维工作的朋友都不陌生,都对Shell 有基本的了解,可能大家刚开始接触Shell的时候,有各种想法?能不能不学?高大上?到底是浮云?还是神马?很难啊?我想告诉大家的是,大家有这些想法一点都不觉得惊讶,为什么?这些都很正常,对于任何一件事情在未开始之前,肯定会有总总假设,那我今天想说的是,学完人人都会Shell 编程后,我们会觉得一切的Shell都是浮云,我们每个人都能很好的使用它,驾驭它,更好的完成我们日常运维的工作。曾经有人说过,玩Linux不知道Shell,那就是不懂Linux;现在细细品味确实是这样。为了让更多的人能接触Shell、了解Shell,使用Shell,所以今天开设了这样一个网络课程,让我们的Shell飞起来。 2 Shell编程之变量及LAMP导航菜单编写 [免费观看]

Shell编程基础.pdf

为什么要进行shell编程 Linux系统中虽然有各种各样的图形界面工具,但shell仍然是一个非常灵活的工具。Shell不仅集合了大量命令,还是一门非常棒的编程语言。借助shell,大量任务能实现自动化;shell特别擅长系统管理任务,尤其适合那些易用性、可维护性和便携性比效率更重要的任务。 下面,让我们一起来看看shell是如何工作的: 建立一个脚本 Linux中有许多种不同的shell,通常我们使用bash (bourne again shell) 进行shell编程因为bash不仅免费(自由)且易于使用。本文提供的脚本都用bash(当然大多数情况下,这些脚本同样可以在bash的前辈, bourne shell中运行)执行。 如同其他语言一样,我们可以使用任意一种文字编辑器,比如nedit、kedit、emacs、vi 等来编写shell脚本,它必须以如下行开始(必须放在文件的第一行): 代码: #!/bin/bash 符号#!用来告诉系统执行该脚本的程序,本例使用/bin/sh。编辑完了,如果要执行该脚本,还必须使其可执行: 代码: chmod +x filename 这样输入 ./filename 便可执行该脚本。 注释 shell脚本中以# 开始的行表示注释,直到一行的结束。我们真诚的建议你在脚本中使用注释,这样即便在相当长时间内没有使用该脚本,你也能在短时间内明白该脚本的作用和工作原理;此外还有很重要的原因——有了注释,更利于和别人分享你的脚本。 变量 在其它编程语言中,你必须使用变量。shell编程中,所有变量都由字符串组成,并且不需要声明。要给一个变量赋值,你可以这么写: 代码: 变量名=值

Shell编程基础教程

1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须放在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。 当编辑好脚本时,如果要执行该脚本,还必须使其可执行。要使脚本可执行: chmod +x filename 这样才能用./filename 来运行 1.1.2 注释 在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程序中使用注释。如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用及工作原理。 1.1.3 变量 在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写: #!/bin/sh #对变量赋值: a="hello world" # 现在打印变量a的内容: echo "A is:" echo $a 有时候变量名很容易与其他文字混淆,比如: num=2 echo "this is the $numnd" 这并不会打印出"this is the 2nd",而仅仅打印"this is the ",因为shell会去搜索变量numnd的值,但是这个变量时没有值的。可以使用花括号来告诉shell我们要打印的是num变量: num=2 echo "this is the ${num}nd"

这将打印: this is the 2nd 1.1.4 环境变量 由export关键字处理过的变量叫做环境变量。我们不对环境变量进行讨论,因为通常情况下仅仅在登录脚本中使用环境变量。 1.1.5 Shell命令和流程控制 在shell脚本中可以使用三类命令: 1)Unix 命令: s虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令。这些命令通常是用来进行文件和文字操作的。 常用命令语法及功能: echo "some text": 将文字内容打印在屏幕上 ls: 文件列表 wc –l filewc -w filewc -c file: 计算文件行数计算文件中的单词数计算文件中的字符数 cp sourcefile destfile: 文件拷贝 mv oldname newname : 重命名文件或移动文件 rm file: 删除文件 grep 'pattern' file: 在文件内搜索字符串比如:grep 'searchstring' file.txt cut -b colnum file: 指定欲显示的文件内容范围,并将它们输出到标准输出设备比如:输出每行第5个到第9个字符cut -b5-9 file.txt千万不要和cat命令混淆,这是两个完全不同的命令 cat file.txt: 输出文件内容到标准输出设备(屏幕)上 file somefile: 得到文件类型 read var: 提示用户输入,并将输入赋值给变量 sort file.txt: 对file.txt文件中的行进行排序 uniq: 删除文本文件中出现的行列比如: sort file.txt | uniq expr: 进行数学运算Example: add 2 and 3expr 2 "+" 3 find: 搜索文件比如:根据文件名搜索find . -name filename -print tee: 将数据输出到标准输出设备(屏幕) 和文件比如:somecommand | tee outfile basename file: 返回不包含路径的文件名比如: basename /bin/tux将返回 tux

Shell基本命令

Shell基本命令 几个基本的shell命令,用ssh管理主机必备。 1.ls 列出目录下的文件,不同类型的文件颜色不同,例如蓝色是文件夹,白色是文件 [root@restoretmp steph]# ls file.html public_html test [root@restoretmp steph]# 参数: ls -a 列出所有文件,包括隐藏文件 [root@restoretmp steph]# ls -a . .. .bash_logout .bash_profile .bashrc file.html public_html test [root@restoretmp steph]# ls -l 列出所有者size 文件权限修改日期 ls -R 递归列出所有子目录的内容 2. cd 转移目录 cd /home/steph 将转移到/home/steph cd .. 上移一个目录 cd 回到根目录 3. 建立新文件和文件夹 touch new-filename 建立新文件 mkdir new-directory 建立新目录 4.删除文件和目录 rm filename 删除名为filename的文件 rmdir foldername 删除名为foldername的目录 5.修改文件夹权限 chmod 755 foldername 将把名为foldername的文件夹的权限修改为755 6.修改用户 chown steph:steph file.html 把file.html的用户修改为steph:steph 2. 压缩和解压缩文件 gzip 和gunzip 压缩: gzip filename 文件即会被压缩,并被保存为filename.gz

PowerShell基础教程

PowerShell基础教程一:Windows PowerShell简介 XP/Server 2003/Vista/Server 2008操作系统的脚本语言。包括 Cmd.exe 、SH、KSH、CSH以及BASH Unix在内的大多数外壳程序的操作方式都是在新的进程中执行命令或实用工具程序,并以文本格式向用户显示结果。多年以来,许多文本处理实用工具程序,如sed、AWK 和 PERL,都已逐渐发展为支持这种交互模式。 这些外壳程序也会提供内置于外壳程序中并在外壳程序处理器中执行的 命令,例如KSH 中的typeset命令和以及 Cmd.exe 中的 dir 命令。在大多数外壳程序中,由于内置命令数量少,从而导致许多实用工具程序应运而生。 针对这一点,Windows PowerShell 有不同的做法。 ◆ Windows PowerShell 并不处理文本,而是处理以.NET平台为基础的对象; ◆Windows PowerShell 附带了数量庞大的内置命令集和一致的接口; ◆对于各个工具,全部的外壳程序命令都使用相同的命令剖析器,而非使用不同的剖析器,这项特点会使你更容易学会每种命令的使用方式。 其中最棒的就是你完全不需要舍弃已使用习惯的工具,你可以继续在Windows PowerShell 中使用诸如Net、SC 和 Reg.exe 等传统的 Windows 工具。 Windows PowerShell Cmdlet Cmdlet (发音如“command-let”) 是指在 Windows PowerShell 中用来操作对象的单一功能命令。你可以依据其名称格式来加以辨识 Cmdlet -- 以破折号 (-) 分隔的动词和名词,例如Get-Help、Get-Process 和 Start-Service。 在传统的外壳程序中,命令是极为简单 (例如 attrib.exe) 到极为复杂 (例如 netsh.exe) 范围内的可执行程序。 在 Windows PowerShell 中,大多数Cmdlet 都相当简单,而且设计成与其他Cmdlet 结合使用。例如,"get" Cmdlet 只提取数据,"set" Cmdlet 只创建或修改数据,"format" Cmdlet 只格式化数据,而 "out" Cmdlet 只将输出导向到指定的目的地。每种 Cmdlet 都具备可在输入下列命令时加以显示的说明文件:

shell基础知识(新手必备)

目录 shell基础知识(新手必备) (2) shell基础语法之变量 (2) shell 变量命名 (2) shell 变量调用 (3) shell 变量分类 (3) shell 运算符 (9) 运算符种类 (10) 关系运算符 (12) 布尔运算符 (15) 字符串运算符 (17) 逻辑运算符 (20) 文件测试运算符 (22) shell条件判断&流程控制 (25) 单分支if (25) 双分支if (26) 多分支if语句 (28)

shell基础知识(新手必备) 不论前端还是后端、运维等,再学会Linux的基础上,还应该学会写一些简单的Shell。不止是工作,日常中想做一些东西,如果手动做就很累人也费时间,如果你会用Shell脚本处理就很简单了,本文普及的shell的一些基础知识。 shell基础语法之变量 shell 变量命名 ?变量只能由大小写字母,数字和下划线组成。 ?变量名称不能以数字开头。 ?变量可以存储数字类型或者字符串类型。 ?变量赋值等号两边不能有空格。 ?字符串的变量可以用单引号或者双引号括起来。 定义变量: name="xiaoka" age=2 无效的定义: root@Servers1]# 1212=sfds -bash: 1212=sfds: 未找到命令

[root@Servers1]# ?aasd=hehe -bash: ?aasd=hehe: 未找到命令 shell 变量调用 变量的调用使用$符号或者$符号加上花括号。一般来讲使用花括号的用法。举例说明: [root@Servers1]# apple=hongfushi [root@Servers1]# echo $applepen [root@Servers1]# echo ${apple}pen Hongfushipen 如果不加花括号,就会读成applepen为一个变量,因此解析产生了歧义。 shell 变量分类 ?环境变量:保存操作系统运行时使用的参数。 ?位置变量:传递脚本参数时使用。 ?预定义变量:类似于环境变量,不同是它是不能重定义的。 ?自定义变量:由用户自定义,可用于用户编写的脚本。 自定义变量:

linux基础shell考试试卷

___________联系方式__________ 中科院测试班linux-基础试卷 一、选择题 1.一个bash shell脚本的第一行是什么() A#!/bin/bash B.#/bin/bash C.#/bin/csh D. /bin/bash 2.下面哪个命令是用来定义shell的环境变量( ) A、exportfs B. alias C. exports D. export 3.哪个命令可以将普通用户转换成超级用户( ) A.super B. passwd C. tar D. su 4.在vi编辑器里,命令"dd"用来删除当前的( ) A.行 B. 变量 C. 字 D. 字符 5.在一行运行多个命令需要用什么字符隔开( ) A. B. $ C. ; D. * 6.按下( )键能终止当前运行的命令 A.Ctrl-C B. Ctrl-F C. Ctrl-B D. Ctrl-D 7.显示用户的主目录的命令是什么?( ) A.echo $HOME B. echo $USERDIR C. echo $ENV D. echo $ECHO 12.在vi编辑器里,哪个命令能将光标移到第200行( ) A.g200 B. G200 C. :200 D. 200g 8.以下哪个命令可以终止一个用户的所有进程( ) A.skillall B. skill C. kill D. killall 9 vi中哪条命令是不保存强制退出( ) A.:wq B. :wq! C. :q! D. :quit 10. vi中复制整行的命令是( ) A.y1 B. yy C. ss D. dd 11.以下对于shell用户变量的定义,不对的是() A.g_Linux=2.6.30 B. LINUX=2.6.30 C.0_Linux=2.6.30 D.linux=2.6.30 12.在终端里执行 echo “current path: “‘ `pwd`’“”结果是: () A.current path:/home/Linux B.current path:’/home/Linux’ C.current path:’`pwd`’ D.current path:`pwd` 二、填空题 1. 对于目录间的切换,跳转到上一级目录使用(),切换到当前用 户的家目录() 2. 需要删除目录xx_linux 下的所有文件及目录,并无需提示逐一删除, 执行命令为()

linux shell基础

Linux shell 基础 1Shell的作用及常见种类 对于Linux内核来说,用户直接发出的操作指令它是―听不懂‖的,而SHELL程序在其中恰恰起到了类似于―翻译官‖的角色,它将用户输入的字符串―翻译‖成内核能够理解的控制指令,从而操作系统内核完成各种任务。 这就好比一个只会西班牙语的经理要带领一群只会说越南语的员工干活一样,中间肯定需要一个懂得两种语言的―翻译官‖(Shell) ?Shell是一个特殊的应用程序,它负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行 ?交互式模式就是shell等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是 大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后, shell也终止了。 1.1Shell的种类 ●Bourne Shell 首个重要的标准Unix Shell是1970年底在V7 Unix(A T&T第7版)中引入的,并且以它的创始科技部基础条件平台―国家气象网络计算应用节点建设‖(2004DKA50730)资助者Stephen Bourne的名字命名。Bourne shell 是一个交换式的命令解释器和命令编程语言。Bourne shell 可以运行为login shell或者login shell的子shell(subshell)。只有login命令可以调用Bourne shell作为一个login shell。此时,shell先读取/etc/profile文件和$HOME/.profile文件。/etc/profile文件为所有的用户定制环境,$HOME/.profile文件为本用户定制环境。最后,shell会等待读取你的输入。 ● C Shell Bill Joy于20世纪80年代早期,在Berkeley的加利福尼亚大学开发了C shell。它主要是为了让用户更容易的使用交互式功能,并把ALGOL 风格的语法结构变成了C语言风格。它新增了命令历史、别名、文件名替

相关主题
文本预览
相关文档 最新文档