shell实验设计

准备工作

打开终端窗口,依次输入如下命令
$ cd base
$ mkdir shell_text
在当前目录下新建文件夹shell_text,作为本实验的工作目录。
接下来,进入shell_text的目录下,开始我们的实验。
$ cd shell_text

-----------------------------------------------------------------------------------------------------

page1

基本概念

1.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)

我们在此选择Bourne Again Shell(/bin/bash),也就是在脚本的第一行写上#!/bin/bash

2.运行方法
  • 第一种:将代码保存为 test.sh,并 cd 到相应目录,使用如下命令
chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本
  • 第二种:直接运行解释器,其参数就是 shell 脚本的文件名,如:
/bin/bash test.sh
3.注释

# 注释内容...

:<<EOF
注释内容...
注释内容...
EOF

-----------------------------------------------------------------------------------------------------

page2

Shell变量

1.定义变量

your_name="Upcer"

变量名和等号之间不能有空格,同时,变量名的命名须遵循如下规则:

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。
2.使用变量

使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

your_name="Upcer"
echo $your_name
echo ${your_name}

其中,加花括号是为了帮助解释器识别变量的边界,建议写的时候都加上。

3.字符串
  • 字符串可以用单引号,也可以用双引号,也可以不用引号。但是单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
  • 获取字符串长度${#string}
  • 切片${string:1:4}注意:第一个数字是起始位置,第二个数字是长度,不是结束位置
4.数组
  • 数组的定义数组名=(值1 值2 ... 值n)
  • 获取单个元素array_name[0]
  • 获取全部元素array_name[@]
3.其他

readonly your_name将变量设置为只读
unset your_name删除变量

-----------------------------------------------------------------------------------------------------

page3

Shell运算符

1.算数运算符

使用expr进行表达式的求值,注意,* 应写成 \*,如下:

+-*/% :`expr $b % $a` 返回表达式的值
==    :[ $a == $b ]  返回 true or false
!     :[ $a != $b ]  返回 true or false
2.关系运算符
-eq:==   -ne:!=    -gt:>    -ge:>=    -lt:<     -le:<=

使用:[ $a -lt $b ]返回true或false

3.布尔运算符
!:非    -o:或    -a:与

使用:[ $a -lt 20 -o $b -gt 100 ] 返回true或false

4.逻辑运算符
&&:逻辑的and
||:逻辑的or

使用:[[ $a -lt 100 && $b -gt 100 ]]返回true或false

-----------------------------------------------------------------------------------------------------

page4

echo命令

1.显示普通字符串`

echo "It is a test"
echo It is a test

2.显示变量

echo "${name} It is a test"

3.显示换行/不换行

echo -e "OK! \n" #-e开启转义
echo -e "OK! \c" #-e开启转义 \c 不换行

4.原样输出字符串,不进行转义或取变量(用单引号)

echo '$name\"'输出结果为:$name"\

5.显示命令执行结果

echo 命令即可

-----------------------------------------------------------------------------------------------------

page5

流程控制

1.if elif else
if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi
3.for 循环
for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done
4.while 循环
while condition
do
    command
done
5.跳出循环

使用breakcontinue

6.其他

上述结构中的condition,均可以用((表达式))代替,其表达式要符合C语言的规则,如for((i=0;i<=5;i++))if((i<=5))

-----------------------------------------------------------------------------------------------------

page6

函数

1.基本格式
[ function ] funname [()]
{
    action;
    [return int;]
}
  • 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
  • 如果不加return,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)
  • 函数返回值在调用该函数后通过 $? 来获得。
2.函数参数

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…例如:

fun(){
    echo "第一个参数为 $1 !"
    echo "第十个参数为 ${10} !"
    echo "参数总数有 $# 个!"    # 
    echo "作为一个字符串输出所有参数 $* !"
}
fun 1 2 3 4 5 6 7 8 9 34 73

输出:

第一个参数为 1 !
第十个参数为 34 !
参数总数有 11 个!
作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !

$#传递到脚本或函数的参数个数
$*以一个单字符串显示所有向脚本传递的参数
$@与$*相同,但是使用时加引号,并在引号中返回每个参数。

-----------------------------------------------------------------------------------------------------

page7

Shell文件包含

1.语法格式

. filenamesource filename
. ./test1.sh

  • 这样可以很方便的封装一些公用的代码作为一个独立的文件。
  • 被包含的文件 test1.sh 不需要可执行权限。

-----------------------------------------------------------------------------------------------------

page8

实验任务

任务一:

在实验目录下新建名为jiaoben.sh的脚本文件,进行脚本的编写

任务二:

智科三个班的同学一起去实习,每个班30人,一共90人。公司要为他们建立账号,class[i]stu[j],每个账号的默认密码都是123456
编写上面创建的脚本,实现如下功能:

  • 首先,批量建立如上用户,其中 i 的范围是(1-3),j 的范围是(01-30)。
    运行后的结果是建立如下用户
class1stu01
class1stu02
class1stu03
......
calss2stu01
......
class3stu30
  • 其次,还要求该脚本可以在建立用户的同时,还能将建立的用户名和密码成对写入到名为UserTable.txt的文件下。UserTable.txt的内容如下:
class1stu01:123456
class1stu02:123456
......
class1stu01:123456
class2stu02:123456
......
class3stu30:123456

-----------------------------------------------------------------------------------------------------

page9
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值