SHELL --- 第一次作业

作业题目:

1.命令使用:echo、eval、exec、export、read、shift、exit(要求退出码为222)
这些命令的功能,以及用例
2..使用read从标准输入读取两个变量: name1和name2, 要求name1包含空格
3.定义自定义环境变量:(使用export和declare)
针对root用户的所有连接:root_data=root
针对所有用户的变量: all_data=all
查看所有的环境变量, 查看所有变量
4.脚本执行的方式及特点:用样例验证
5.设置vim编辑sh文件的缩进为4个空格
6.$#,$*,$@,$n,$?的使用

作业过程:

1.命令使用:echo、eval、exec、export、read、shift、exit(要求退出码为222)
这些命令的功能,以及用例

echo、eval、exec、export、read、shift、exit这些都为常用的内部命令。

echo:在屏幕上输出信息

参数选项:

-n        不换行输出内容

-e        解析转义字符

示例:输出 i love shell

-n:

[root@haha ~]# echo -n "i love shell"
i love shell[root@haha ~]

-e:

[root@haha ~]# echo -e "i\tlove\tshell"
i    love    shell
 

eval:

格式: eval args

功能: 当shell程序执行到eval语句时,shell读入参数args,并将它们组合成一个新的命令,然后执 行。

示例:

[root@haha ~]# a='shuju;head -1 /etc/passwd'
[root@haha ~]# echo $a
shuju;head -1 /etc/passwd
[root@haha ~]# eval echo $a
shuju
root:x:0:0:root:/root:/bin/bash
 

exec:能够在不创建新的子进程的前提下,转去执行指定的命令,当指定的命令执行完毕后,该 进程就终止了。

示例:

[root@haha ~]# exec ls
执行后会退出当前进程,需要重新链接ssh

export设置或者显示环境变量

示例:

直接输入export会显示所有的环境变量

export datan=1 把datan=1加入到环境变量中

read:可从标准输入读取字符串等信息,传给shell程序内部定义的变量。

-p prompt:设置提示信息

-t timeout:设置输入等待时间,单位默认为秒

示例:

-p: 设置提示信息比如please input a number

[root@haha ~]# read -p "please input a number:" number
please input a number:50
[root@haha ~]# echo $number
50
 

-t : 设置输入的等待时间,超过等待时间程序将会自动停止

shift:在程序中每使用一次shift语句,都会使所有的位置参数依次向左移动一个位置,并使位置参 数$#减1,直到减到0为止。

示例:

exit:退出shell程序。在exit之后可以有选择地指定一个数作为返回状态

示例:

在文件中输出this is a shell 并写出返回的值 

[root@haha ~]# bash -x test_s.sh 
+ echo 'this is a shell'
this is a shell
+ exit 222

bash -n为脚本单步执行

2..使用read从标准输入读取两个变量: name1和name2, 要求name1包含空格

[root@haha ~]# echo -a "input name1 and name2:";read -a name1;read -a name2
-a input name1 and name2:
stenf curry james
example
[root@haha ~]# echo "${name1[0]} ${name1[1]} ${name1[2]}"
stenf curry james

3.定义自定义环境变量:(使用export和declare)
针对root用户的所有连接:root_data=root
针对所有用户的变量: all_data=all
查看所有的环境变量, 查看所有变量

定义自定义环境变量:

export name=1

export 查看

unset name 删除环境变量

同理declare一样,以下为declare的参数选项

-p:显示所有变量的值

-i:将变量定义为整数,在之后就可以直接对表达式求值,结果只能是整数。如果求值失败或者不是整 数,就设置为0。

-r:将变量声明为只读变量。只读变量不允许修改,也不允许删除。(也可使用readonly定义只读变量)

-a:变量声明为数组变量。但这没有必要,所有变量都不必显示定义就可以用作数组。事实上,在某 种意义上,似乎所有变量都是数组,而且赋值给没有下标的变量与赋值给下标为0的数组元素相同。

-f:显示所有自定义函数,包括名称和函数体。

-x:将变量设置成环境变量。可使用+x将变量变成非环境变量

env也可以查看环境变量

#针对root用户的所有连接:root_data=root
[root@servera bash]# vim /etc/profile
ROOT_DATA="ROOT"
export ROOT_DATA

#针对所有用户的变量: all_data=all
[root@servera bash]# vim ~/.bash_profile
ALL_DATA=="ALL"
export ALL_DATA
#重新加载环境变量
[root@servera bash]# source ~/.bash_profile 
[root@servera bash]# source /etc/profile

查看所有的环境变量, 查看所有变量
[root@servera bash]# set | grep ROOT_DATA
ROOT_DATA=ROOT
[root@servera bash]# set | grep ALL_DATA
ALL_DATA==ALL

4.脚本执行的方式及特点:用样例验证

1)bash ./filename.sh(产生子进程,再运行,使用当前指定的bash shell去运行) 2)./filename.sh(产生子进程,再运行,使用脚本里面指定的shell去运行。使用该种方式执行需要x 权限)

3)source ./filename.sh(source命令是一个shell内部命令,其功能是读取指定的shell程序文件,并 且依次执行其中的所有的语句,并没有创建新的子shell进程,所以脚本里面所有创建的变量都会保存到 当前的shell里面)

4). filename.sh(和source一样,也是使用当前进程执行)

5.设置vim编辑sh文件的缩进为4个空格

[root@servera bash]# vim ~/.vimrc
autocmd FileType sh setlocal ai ts=2 sw=2 et

6.$#,$*,$@,$n,$?的使用

[root@servera bash]# vim p_test.sh
echo "------------------"
echo $#
echo "------------------"
echo $2
echo "------------------"
echo $?
[root@servera bash]# bash p_test.sh 1 2 3 4 5
------------------
5                   # 参数总数          
------------------
2                   # 第2个位置参数对应的值
------------------
0                   # 执行状态码,0表示执行成功

其中$*和$@需要特别注意:
$*:以"参数1 参数2 参数3…"的形式返回所有参数的值
$@:以"参数1""参数2""参数3"…的形式返回所有的值
示例
[root@servera bash]# vim return_all_vars_test.sh
for i in "name1 name2 name3 name4"
do
  echo $i
done

for i in "name1" "name2" "name3" "name4"
do
  echo $i
done
[root@servera bash]# bash return_all_vars_test.sh 
name1 name2 name3 name4
name1
name2
name3
name4

  在Linux系统的/etc目录下有这样一个文件passwd,该文件里包含系统中所有用户信息的记录,记录里包含每个用户的如下信息:用户名、密码、用户ID、组ID、用户全名、用户主目录和用户登录所用的shell。请设计一个脚本(shell)程序能实现增加、删除、查找和显示特定用户信息的功能。你们可以通过创建一些UNIX/LINUX shell 脚本文件来满足以上需求。   可以用任意一个文本编辑器打开passwd文件,该文件里包含用冒号分隔开的字段组成的记录,如下所示:   root:x:0:0:root:/root:/bin/bash   zxj:x:500:500:zxj303:/home/zxj:/bin/bash    . .   在主Shell脚本文件里(必须以 menu 命名)要有一个多操作选项的菜单以便用户从中选择。在不同任务的中,这些操作能自动实现以下功能: 在屏幕上显示当前所有用户的记录 在屏幕上显示当前所有用户(经过格式化和排序的)的记录 只在屏幕上显示用户名和用户ID 只在屏幕上显示(经过格式化和排序的)用户名和用户ID 查询并显示特定用户的记录 往passwd文件里增加新的用户记录 从passwd文件里删除某个用户记录   你可以使用UNIX/LINUX中一些比较简单的命令或命令组合来执行1、2、3、4、5的任务。对于任务6和7,你需要编写单独的Shell脚本文件(必须分别命名为add和delete)并且在你的主脚本menu文件中调用这些脚本文件。   可能你还需要查询一些Unix/Linux命令,比如awk,、sort、tr、cut、paste、sed、grep;你也可能还需要查询其他的Unix/Linux命令。   建议你在主目录下建立一个以 xx xx xx(xx xx xx为学号)命名的目录,并且在本次作业中使用它作为工作目录。 主脚本文件中的菜单   在menu脚本文件里将创建如下菜单,菜单里包含供用户选择的一些操作。 用户信息主菜单 打印当前所有记录 打印当前所有记录(格式化后的) 打印用户名和用户ID 打印(格式化了的)用户名和用户ID 查询特定记录 增加新记录 删除记录 Q——退出 你的选择是:(等待用户输入)   当用户做了选择且所选的操作完成之后,应再次显示主菜单以供用户做下一步选择。你必须用while循环和case条件语句配合来完成此操作。另外在显示主菜单前必须先清除用户屏幕。在以下所有步骤中,当显示主菜单前都需要先清屏。   在menu脚本文件的前面部分你首先要定义三个变量,这三个变量分别存放passwd、add、delete文件的文件名,并且能在所有涉及到passwd、add、delete文件的语句中使用他们。 比如,可以定义成:           record_file=passwd   在所有访问passwd文件的语句中,只要使用 $record_file 即可。这样做的一个优点就是,如果以后你需要重新命名记录或者需要在不同的记录文件中使用你的脚本的话,你只需要修改以上一个语句而不须在所有有关的记录文件里逐一修改语句。如下定义另外两个变量:   add_file=add   delete_file=delete   定义以上变量之后,你必须核对menu脚本文件,看看所需的文件(passwd、add、delete)是否准确存放在当前目录下。如果其中任何一个不存在,你的脚本menu文件就必须显示以下信息,然后退出:   Required file theMissingFile does not exist.(所需文件不存在)   比如,如果passwd文件不存在,就显示“Required file passwd does not exist.(所需文件记录不存在)”然后退出。   在以上等待用户做出选择的菜单中,如果用户偶尔输入了一个代码而不是1、2、3、4、5、6、7或Q,就有信息提示“无效的代码,请按回车键继续``````”(务必保证光标停留在此信息行末尾而不是在下一行的开始处)。等用户按了回车键之后,再次显示主菜单供用户做其他选择。可以允许用户使用Q或q退出。   在以上等待用户做出选择的菜单中,如果用户简单地按了回车键(而不是输代码)的话,就会出现信息“Selection not entered. Press Enter to continue…"(务必保证光标停留在此信息行末尾而不是在下一行的开始处)。等用户按了回车键之后,再次显示主菜单供用户做其他选择。   当用户选择了第一项——打印当前所有用户记录   以下是当用户在主菜单中选择第一个选项后,menu脚本文件输出的内容的例子:    (此处是主菜单—略) 你的
### 回答1: 北邮linux的第三次上机作业是在系统管理课程中所进行的,主要涵盖了对Linux系统的进程管理、文件系统扩展、定时任务、用户和组管理等方面的学习。 在进程管理方面,我们主要掌握了如何使用ps命令、top命令和kill命令来查看、控制和关闭进程。在文件系统扩展方面,我们学习了如何使用LVM技术来管理硬盘的扩容和分区,以及如何使用fdisk命令来对磁盘进行分区管理。 此外,我们还掌握了如何使用crontab命令来进行定时任务的管理和设置,以及如何使用useradd命令和usermod命令来进行用户和组的管理和权限设置。这些技能对于如今的系统管理者而言是必须的。 在此次实验中,我们通过实际操作,更好地理解了Linux系统管理的机制和原理,掌握了课堂所学的知识点,并且对系统管理者所需要具备的能力进行了深入的思考和探讨。这些都是我们在今后的学习和工作中必不可少的技能。 ### 回答2: 北邮linux第三次上机作业是一项挑战性较高的任务,要求参与者具备一定的软件编程和计算机网络方面的知识。任务主要分为两个部分,第一部分是编写程序,第二部分是进行网络配置。 在编写程序的部分,参与者需要使用C或C++编写一个多线程的程序,并通过文件读取或用户输入来进行数据处理。该任务要求参与者能够熟练运用多线程的编程思想,以及能够对数据进行有效的处理和分析。此外,还要求程序能够稳定运行,并在遇到异常情况时给出正确的提示信息。 在网络配置的部分,参与者需要在Linux系统上配置一个网络服务,并对相应的服务进行测试。该任务要求参与者具备一定的计算机网络知识,能够熟练操作Linux系统,并能够利用相应的工具完成网络配置。此外,还要求参与者能够对配置的服务进行实际测试,并对测试结果进行分析。 总的来说,北邮linux第三次上机作业是一项涉及多个方面的任务,要求参与者具备综合的软件编程和计算机网络能力。完成该任务可以帮助参与者提高自己的技术水平,同时也有助于加强他们的团队沟通和协作能力。 ### 回答3: 北邮Linux第三次上机作业是一项关于Shell编程的实践任务,要求学生通过练习,掌握Shell脚本的基本语法和应用,加深理解Linux操作系统的特性和原理。该次实践作业旨在提高学生的实际操作能力,培养学生的团队精神和创新意识。 该作业的主要任务是实现一个小型的Shell应用程序,包括输入输出和文件操作、字符串操作和文件查找等多个功能。学生需要根据题目要求设计功能模块,编写Shell脚本程序,并进行测试和调试。实践过程中,要注意代码规范性和运行效率,以及对实验结果的记录和总结。 通过这次实践作业,学生可以更加深入地理解Shell编程语言,掌握Linux操作系统的基本操作和应用技巧,提高自己的逻辑思维和编程水平。同时,通过团队协作和分享经验,可以加强学生的交流和合作意识,培养创意和创业精神。 总之,北邮Linux第三次上机作业是一项富有挑战和创新性的实践任务,可以为学生打下深厚的理论和实践基础,提高学生的实际操作能力,激励学生的创新和创业精神,为未来的职业生涯做好充分准备。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值