Linux常用命令2和简单shell编程练习实验报告

1 实验目的:

掌握Linux环境下的基本权限操作命令。

2 实验内容:

掌握Linux的权限操作命令

3 实验步骤:

3.1 Linux常用命令使用

3.1.1 查看登录的用户和自己登录的身份

查看登录的用户:

[m112013@tan ~]$ users

m112001 m112003 m112004 m112006 m112007 m112011 m112012 m112013 m112015

m112016 m112019 m112020 m112023 m112024 m112025 m112026 m112027 m112029

m112030 m112031 m112033 m112034 m112035 m112036 m112038 m112040 m112042

m112044 m112046 m112047 m112048 t7

[m112013@tan ~]$ w

09:28:18 up 28 days, 1:13, 37 users, load average: 0.26, 0.25, 0.18

USER TTY FROM LOGIN@ IDLE JCPU WHAT

m112042 pts/1 192.168.2.111 09:10 1.00s 0.03s 0.03s -bash m112030 pts/3 192.168.2.50 09:11 1:57 0.02s 0.02s -bash m112028 pts/4 192.168.2.52 09:12 14.00s 0.02s 0.02s -bash m112033 pts/8 192.168.2.168 09:14 22.00s 0.02s 0.02s -bash m112036 pts/11 192.168.2.69 09:15 2.00s 0.01s 0.01s -bash m112015 pts/12 192.168.2.48 09:15 3:29 0.02s 0.02s -bash m112048 pts/13 192.168.2.70 09:16 4:11 0.02s 0.02s -bash m112019 pts/16 10.255.60.77 09:17 1:17 0.01s 0.01s -bash m112029 pts/17 192.168.2.66 09:17 1:18 0.02s 0.02s -bash m112035 pts/18 10.255.60.87 09:17 53.00s 0.03s 0.03s -bash m112014 pts/15 192.168.2.68 09:17 4:18 0.00s 0.00s -bash m112027 pts/19 192.168.2.57 09:17 1:43 0.02s 0.02s -bash m112023 pts/21 192.168.2.58 09:18 10.00s 0.01s 0.01s -bash m112024 pts/20 10.255.61.253 09:18 31.00s 0.01s 0.01s -bash m112034 pts/22 192.168.2.49 09:18 6.00s 0.02s 0.02s -bash m112025 pts/9 192.168.2.72 09:18 51.00s 0.01s 0.01s -bash m112006 pts/5 192.168.2.75 09:20 1:36 0.01s 0.01s -bash m112014 m112028 m112041 PCPU

m112007 pts/25 192.168.2.84 09:21 1:02 0.01s 0.01s -bash

m112026 pts/23 192.168.2.53 09:21 2.00s 0.03s 0.03s -bash

m112012 pts/27 10.255.60.26 09:21 17.00s 0.01s 0.01s -bash

m112038 pts/26 192.168.2.82 09:21 23.00s 0.01s 0.01s -bash

m112004 pts/29 192.168.2.88 09:21 1:02 0.02s 0.02s -bash

m112016 pts/28 192.168.2.92 09:22 1.00s 0.02s 0.02s -bash

m112041 pts/2 10.255.60.60 09:23 34.00s 0.01s 0.01s -bash

m112001 pts/31 192.168.2.79 09:23 41.00s 0.01s 0.01s -bash

m112020 pts/32 192.168.2.54 09:23 58.00s 0.01s 0.01s -bash

m112003 pts/33 192.168.2.74 09:23 4:29 0.01s 0.01s -bash

m112011 pts/6 192.168.2.78 09:23 2:42 0.01s 0.01s -bash

m112013 pts/7 192.168.2.60 09:25 0.00s 0.02s 0.01s w

m112044 pts/10 192.168.2.59 09:26 1:57 0.00s 0.00s -bash

m112040 pts/24 192.168.2.91 09:26 1:32 0.01s 0.01s -bash

t7 pts/35 10.255.61.41 09:27 1:04 0.01s 0.01s -bash

m112047 pts/14 192.168.2.56 09:27 36.00s 0.01s 0.01s -bash

m112031 pts/30 192.168.2.73 09:27 57.00s 0.01s 0.01s -bash

m112046 pts/34 192.168.2.85 09:27 0.00s 0.01s 0.01s -bash

m112032 pts/37 192.168.2.55 09:27 33.00s 0.01s 0.01s -bash

m112021 pts/36 192.168.2.46 09:27 1.00s 0.01s 0.01s -bash

3.1.2 查看文件file1的权限,将其权限更改为拥有者和组成员都被授予读取、写入和

执行权限。验证你的实验结果(用数字法)。

查看权限:

[m112013@tan ~]$ cd

[m112013@tan ~]$ cd subdir

[m112013@tan subdir]$ ls -l

total 12

-rw-rw-r-- 1 m112013 m112013 5690 Dec 30 14:20 file_a

修改权限:

[m112013@tan subdir]$ chmod 777 file_a

[m112013@tan subdir]$ ls -l file_a

-rwxrwxrwx 1 m112013 m112013 5690 Dec 30 14:20 file_a

3.1.3 将文件file1的权限修改为上次更改前的状态(用数字法),并验证你的实验结果。

[m112013@tan subdir]$ chmod 775 file_a

[m112013@tan subdir]$ ls -l file_a

-rwxrwxr-x 1 m112013 m112013 5690 Dec 30 14:20 file_a

3.1.4 设文件file1的权限如下:

-rw-rw-r-- 1 用户名 组名

[m112013@tan subdir]$ chmod 664 file_a

[m112013@tan subdir]$ ls -l file_a

-rw-rw-r-- 1 m112013 m112013 5690 Dec 30 14:20 file_a

3.1.5 用文字法将其权限更改为:-rwxrwxrw-,并验证你的实验结果。

[m112013@tan subdir]$ ls -l

total 12

-rw-rw-r-- 1 m112013 m112013 5690 Dec 30 14:20 file_a

[m112013@tan subdir]$ chmod a+w file_a

[m112013@tan subdir]$ ls -l

total 12

-rw-rw-rw- 1 m112013 m112013 5690 Dec 30 14:20 file_a

[m112013@tan subdir]$ chmod a+x file_a

[m112013@tan subdir]$ ls -l

total 12

-rwxrwxrwx 1 m112013 m112013 5690 Dec 30 14:20 file_a

[m112013@tan subdir]$ chmod o-x file_a

[m112013@tan subdir]$ -l

-bash: -l: command not found

[m112013@tan subdir]$ ls -l

total 12

-rwxrwxrw- 1 m112013 m112013 5690 Dec 30 14:20 file_a

3.1.6 将你所在的工作目录的两个文件拷贝到ABC目录下,并在ABC目录下建立

ABC1子目录。

[m112013@tan subdir]$ mkdir ABC

[m112013@tan subdir]$ ls -l

total 20

drwxrwxr-x 2 m112013 m112013 4096 Jan 5 09:53 ABC

-rwxrwxrw- 1 m112013 m112013 5690 Dec 30 14:20 file_a

拷贝:

[m112013@tan subdir]$ cd subdir

-bash: cd: subdir: No such file or directory

[m112013@tan subdir]$ cp file_a ABC

[m112013@tan subdir]$ cd ABC

[m112013@tan ABC]$ ls -l

total 12

-rwxrwxr-- 1 m112013 m112013 5690 Jan 5 09:55 file_a

创建ABC目录

[m112013@tan ABC]$ mkdir ABC1

[m112013@tan ABC]$ ls -l

total 20

drwxrwxr-x 2 m112013 m112013 4096 Jan 5 09:57 ABC1

-rwxrwxr-- 1 m112013 m112013 5690 Jan 5 09:55 file_a

3.1.7 将ABC子目录权限设置为对拥有者、所在组和其它用户均为可读、可写(注意

包括子目录ABC1)。

[m112013@tan ~]$ cd subdir

[m112013@tan subdir]$ cd ABC

[m112013@tan ABC]$ chmod a+w ABC1

[m112013@tan ABC]$ ls -l

total 20

drwxrwxrwx 2 m112013 m112013 4096 Jan 5 09:57 ABC1

-rwxrwxr-- 1 m112013 m112013 5690 Jan 5 09:55 file_a

3.1.8 检查当前目录的默认权限屏蔽,并将其更改为022,然后在当前目录下创建一

个名为qqq的子目录,问:子目录qqq的权限是什么?解释原因。

注:man umask

umask –p mode

3.2 编辑shell文件ex1,内容如下:

pwd date cd .. ls

执行上述shell过程,并记录显示结果。

[m112013@tan ~]$ pwd

/home/m112013

[m112013@tan ~]$ date

Sat Jan 5 10:25:37 CST 2013

[m112013@tan ~]$ cd

[m112013@tan ~]$ ls

lab1 lab2 subdir

4 实验总结

1) 查看登录的用户和自己登录的身份不知道用什么命令,网上搜集资料是采用

users,不太理解登录的身份所指何意。

2) 关于权限问题文字法比较容易掌握,数字法经常会把数字搞错。

3) 事先要记得输入“export LANG=en_US”,否则出现乱码。

 

第二篇:shell编程

实验X shell编程(1)

一、实验目的

1、了解shell的概念、shell程序的作用

2、了解shell变量的种类及其使用

3、理解和掌握条件测试的原理和方法

4、掌握用vi、gedit等编辑器创建shell脚本的方法

5、掌握shell脚本的执行方法

二、预备知识

1、Linux系统的Shell

从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作。在Linux GUI日益完善的今天,在系统管理等领域,Shell编程仍然起着不可忽视的作用。深入地了解和熟练地掌握Shell编程,是每一个Linux用户的必修功课之一。使用Linux系统时,用户多数时间是通过Shell与系统进行对话的,它是用户与Linux系统之间的界面之一。

Linux系统中可以使用的Shell包括:

1) bash:Bourne Again Shell。这是Linux系统上最常用的Shell,它合乎POSIX标准

且相容于Bourne Shell,提供了编辑命令行的功能。

2) csh:C Shell。由Berkeley (伯克利大学) 开发,与Bourne Shell在交互式使用上很

多是相兼容的,但在程序设计界面上却有很大的不同。它不提供编辑命令行的功能,但它有类似的功能叫命令历史记录

3) ksh:Korn Shell。在UNIX系统下得到普遍使用,并最早将现代Shell技术 (包括

取自C Shell的部分) 引入Bourne Shell,提供了编辑命令行功能

4) sh:Bourne Shell。是原始的Shell,不提供编辑命令行功能

5) tcsh:C Shell的加强版,提供了编辑命令行的功能

6) zsh:Z Shell。最新的Shell,与Bourne Shell兼容,提供编辑命令行的功能。 一般默认的shell是bash Shell。

三、实验内容

1.Shell变量的定义及其使用。

2.位置参数和环境变量。

3.Shell中的特殊字符。

四、实验步骤

(一)Shell变量

Shell有三种变量:内部变量、环境变量和临时变量。在Shell脚本中临时变量又分为两类:用户定义的变量和位置参数。

1、常用的内部变量。返回值为0代表为真,非0值均为假。

1) # :传给shell程序位置参数的个数

2) ?:存储上一个执行命令的返回值

3) 0: 存储shell程序的名称

4) *: 存储shell程序的所有参数

例如:

1) echo "Number of parameters is:"$#

2) echo "Program name is:"$0

3) echo "Parameters as a single string is:"$*

2、常用的环境变量:

1) HOME: 用户的主目录

2) PATH: 执行命令时所搜索的路径

3) PS1: shell命令行的一级提示符

4) PS2: shell命令行的二级提示符

用 printenv 命令查看当前起作用的环境变量列表,如:

$printenv

列出的环境变量中最重要的是$PATH,它指定了查找可执行程序的路径顺序。例如,如果运行ifconfig检查某个连接状态,而提示命令没找到,其原因是shell的环境变量里没有设置这条路径名。解决办法是:

$whereis ifconfig

$/sbin/ifconfig

在命令行中使用export命令把/sbin目录加到$PATH变量中:

$PATH=$PATH:/sbin;export PATH

$ifconfig

但这是暂时的,仅维持本次登陆执行了export有效。要长期有效必须修改/etc/profile或

主目录下.bash_profile文件中的环境变量。

3、用户定义的变量

用户定义的变量是最普遍的Shell变量,变量名是以字母或下化线打头的字母、数字和下线字符序列,并且大小写字母意义不同。变量名的长度不受限制。定义变量并赋值的一般形式是: 变量名=字符串

例如, myfile=/usr/meng/ff/m1.c

在程序中使用变量的值时,要在变量名前面加上一个符号“$”。这个符号告诉Shell要读取该变量的值。

4、位置参数

执行Shell脚本时可以使用参数。由出现命令行上的位置确定的参数称做位置参数。在sh中总共有十个位置参数,其对应的名称依次是$0,$1,$2,...$9。其中$0始终表示命令名或Shell脚本名,对于一个命令行,必然有命令名,也就必定有$0;而其它位置参数依据实际需求,可有可无。

(二) SHELL中的特殊字符

1、通配符

通常的通配符有三种:

1) * 星号,它匹配任意字符的.)和

路径名中的斜线(/)必须显示匹配。

2) ?问号,它匹配任意一个字符。

3) [] 一对方括号,其中有一个字符组。其作用是匹配该字符组所限定的任意一个字

符。

4) 应该注意:字符 * 和 ?在一对方括号外面是通配符,若出现在其内部,它们就失

去通配符的能力了。

5) !叹号,若它紧跟在一对方括号的左方括号[之后,则表示不在一对方括号中所列

出的字符。

2、引号

在SHELL中引号分为三种:单引号、双引号、和倒引号。

1) 双引号

由双引号括起来的字符,除$、倒引号和反斜线(\)仍保留其功能外,其余字符通常作为普通字符对待。

2) 单引号

由单引号括起来的字符都作为普通字符出现。

3) 倒引号

例如:

$ today=`date`

$echo Today is $ today

Today is Thu May 04 10 :56 :20 CST 2014

4) 反斜线

转义字符,若想在字符串中使用反斜线本身,则必须采用(\\)的形式,其中第一个反斜线作为转义字符,而把第二个反斜线变为普通字符。

(三)条件测试

1、字符串比较

1) = 比较两个字符串是否相等

2) != 比较两个字符串是否不相等

3) -n 判断字符长度是否大于零

4) -z 判断字符长度是否等于零

2、数字比较

1) -eq 比较两个数是否相等

2) -ge 比较一个数是否大于或是等于另一个数

3) -le 比较一个数是否大于或是等于另一个数

4) -ne 比较两个数是否不等

5) -gt 比较一个数是否大于另一个数

6) -lt 比较一个数是否小于另一个数

3、文件操作符

1) -d 确定文件是否为目录

2) -f 确定文件是否为普通文件

3) -r 确定是否对文件设置了读许可

4) -s 确定文件名是否具有大于零的长度

5) -w 确定文件是否设置了写许可

6) -x 确定文件是否设置了执行许可

测试语句:

有两种常用形式:一种是用test命令,如上所示。另一种是用一对方括号将测试条件括起来。两种形式完全等价。例如,测试位置参数$1是否是已存在的普通文件,可写成:test -f " $1",也完全可写成:[ -f $ l ]

在格式上应注意,如果在test语句中使用shell变量,为表示完整、避免造成歧异起见最好用双引号将变量括起来。利用一对方括号表示条件测试时,在左方括号[之后、右方括号]之前各应有空格。

(四)创建简单shell程序

1、进入vi或gedit编辑器

2、编写程序

例:

#!/bin/bash

hello()

{

echo "hello there today's date is:`date`"

}

echo "now going to the function hello"

hello

echo "back from the function"

#end

(五)执行shell程序的方法

方法一 : 加执行权后,程序完整路径引导。 ($chmod u+x filename)

方法二 : shell解释器名称引导。

方法三: 点空格引导。

方法四 : 使用命令替换。

五、实验报告要求

1、整理实验结果,使其分别与相应的命令对应

2、记录程序设计的流程

3、根据实验步骤,写出实验报告

实验x shell编程(2)

一、实验目的

1、掌握if、case等条件语句的使用

2、掌握for、while、until等循环语句的使用方法

3、理解和掌握shift及其它语句的使用方法

二、实验准备

1、硬件:笔记本电脑或台式机电脑;

2、软件:Linux 红帽、ubuntu、麒麟等操作系统。

三、相关知识

1. if 语句

if语句通过判断逻辑表达式来作出选择,在bash中的条件语句有如下的格式: if [ expression ]; then

statements

elif [ expression ]; then

statements

else

statements

fi

if条件语句是可以嵌套的。

2. case语句

case语句是用来执行依赖于离散值或是匹配指定变量值的范围的语句。格式如下: case str in

str1)

statements

……

statements;;

str2)

statements

……

statements;;

str3)

statements

……

statements;;

str4)

statements

……

statements;;

*)

Statements

……

statements;;

esac

3.for语句

for var in {list}

do

statements

done

对list中的每个值需要执行一次statements时应利用这种格式。对每次循环,把list中的当前值赋给变量var。List可以使含有几个项的变量,或是用空格分隔的值表。

4. while语句

在pdksh和bash 中,利用的如下的格式:

while expression

do

statements

done

5.简单程序

1)if语句例子程序

#!/bin/bash

# 提示用户输入份数(0~100)

echo “please input a integer”

read score

# 判断学生的分数类别

if [“$score” –lt 0 –o –gt 100]

then

echo “the score what you input is not integer or the score is not ”

elif [“$score” -ge 90]

then

echo “the grade is A!”

elif [“$score” –ge 80]

then

echo “the grade is B!”

elif [“$score” –ge 70]

then

echo “the grade is C!”

elif [“$score” –ge 60]

then

echo “the grade is D!”

else

echo “the grade is E!”

fi

四、实验内容及步骤

1. 求前五个偶数的和

参考程序:

#!/bin/bash

loopcount=0

result=0

while [ $loopcount –lt 5 ]

do

loopcount=?expr $loopcount +1?

increment=?expr $loopcount \*2?

result= ?$result + $increment?

done

echo "result is $result“

2.设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30。

参考程序:

#!/bin/sh

i=1

groupadd class1

while [ $i -le 30 ]

do

if [ $i -le 9 ] ;then

username=stu0${i}

else

username=stu${i}

fi

useradd $username

mkdir /home/$username

chown -r $username /home/$username

chgrp -r class1 /home/$username

i=$(($i+1))

done

3.编写shell程序,实现自动删除50个账号的功能。账号名为stud1至stud50。 参考程序:

#!/bin/sh

i=1

while [ $i -le 50 ]

do

userdel -r stud${i}

i=$(($i+1 ))

done

五、实验报告要求

1.记录实验中遇到的问题

2.提出程序的改进方法

3.根据实验步骤,写出实验报告

相关推荐