shall脚本相关命令

本文介绍了Linux中的硬链接和软链接概念及使用命令,强调了它们的区别。同时,详细阐述了Shell脚本的本质、创建步骤、变量以及功能性语句,如tar命令的使用和文件操作。此外,还提及了Shell中的条件测试和循环结构。
摘要由CSDN通过智能技术生成

【1】链接文件:

 1)分类:

    硬链接是利用Linux中为每个文件分配的物理编号——inode建立链接。

 因此,硬链接不能跨越文件系统。

    软链接(符号链接)是利用文件的路径名建立链接。通常建立软链接

 使用绝对路径而不是相对路径,以最大限度增加可移植性。

 2)命令:

硬链接:ln 原文件 链接文件名 

软链接:ln -s 原文件 链接文件名

 3)注意:

硬链接:删除或移动目标文件链接依然有效

只能操作普通文件

软链接:删除或移动目标文件链接失效,但是在此创建时链接依然有效

建立软链接使用绝对路径而不是相对路径,以最大限度增加可移植性

【2】shell脚本:

  1.本质:

Shell命令的有序集合

  2.创建步骤:

1)创建shell脚本文件

touch a.sh

2)修改文件权限

chmod 777 a.sh

3)执行脚本文件

./a.sh

练习:

1)在当前路径下创建file_1到file_5,5个普通文件

2)删除 file_2和file_3文件,(使用通配符)

   3)将剩下的file文件用tar压缩成bz2的格式

4)将压缩文件复制到家目录下

5)进入到家目录解压压缩文件

6)删除压缩包

tar -cvf 文件名.tar 要归档的文件

-c:归档

-v:显示过程

-f:必须接文件名,-f参数只能放在参数的最后

-z:借助于gzip工具,打包并压缩 .tar.gz

-j:借助于bzip2工具,打包并压缩 .tar.bz2

-J:借助于xz工具,打包并压缩 .tar.xz

如果借助于压缩文件,对文件进行归档并压缩时,生成的文件名后缀,一定要和参数一致。

-x:万能的拆包和解压缩指令,

tar -xvf 要拆包/解压缩的文件

tar -xzvf .gz ---->拆包并解压缩

tar -xjvf .bz2 ---->拆包并解压缩

tar -xJvf .xz ---->拆包并解压缩

 

  3.shell变量:

Shell允许用户建立变量存储数据,但不支持数据类型(整型、字符、浮点型),

将任何赋给变量的值都解释为一串字符

1)用户自定义变量

在shell编程中通常使用全大写变量,方便识别

变量的调用:在变量前加$

Linux Shell/bash从右向左赋值

使用unset命令删除变量的赋值

2)预定义变量

$0   与键入的命令行一样,包含脚本文件名

$1,$2,……$9  分别包含第一个到第九个命令行参数

${10}, ${11}  打印第十个、十一个命令行参数

$#   包含命令行参数的个数(不包含脚本文件)

$@   包含所有命令行参数:“$1,$2,……$9”

$?    包含前一个命令的退出状态(0为真 1为假)

$*    包含所有命令行参数:“$1,$2,……$9”

 

3)环境变量:一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。

HOME: /etc/passwd文件中列出的用户主目录

PATH :shell搜索路径;比如交叉编译工具的安装使用,在/etc/bash.bashrc文件中添加的内容

 

  4. shell 程序由零或多条shell语句构成。 shell语句包括三类:说明性语句、功能性语句和结构性语句。

1)说明性语句:     

以#号开始到该行结束,不被解释执行

在shell脚本中经常会在第一行写到:#!/bin/bash ,解释如下:第一行的内容指定了shell脚本解释器的路径,而且这个指定路径只能放在文件的第一行。第一行写错或者不写时,系统会有一个默认的bash解释器进行解释。

2)功能性语句:         

任意的shell命令、用户程序或其它shell程序。

3)结构性语句:       

条件测试语句、多路分支语句、循环语句、循环控制语句等。    

【3】功能性语句

  1.read

    read  var1  var2  var3

    把读入行中的第一个单词(word)赋给var1, 第二个单词赋给var2,

……把其余所有的词赋给最后一个变量.

 

  2.expr

算术运算命令expr主要用于进行简单的整数运算,包括加(+)、

减(-)、乘(\*)、整除(/)和求模(%)等操作。

如:

$ expr  12  +  5  \*  3

$ sum=`expr  2  \*  6 `

$ echo  $sum

 

注意:

1.不能直接使用(),如果使用需加上\(\),用作转意,如expr /( 3 + 3 /) / 3

2.运算符和数字之间需要加上空格,如果有括号括号前后也有空格

    3.实现自加运算:

a=`expr $a + 1`  或  ((a++))

实例:计算表达式值a*b+c-d/b,a=2,b=3,c=15,d=18

  要求:

1)从终端读入4个数a,b,c,d

2)进行运算

3)打印结果输出到终端

 

  3.test:

test语句可测试三种对象:

          字符串     整数     文件属性

每种测试对象都有若干测试操作符

1)字符串的测试:

s1 = s2 测试两个字符串的内容是否完全一样

s1 != s2 测试两个字符串的内容是否有差异

-z s1 测试s1 字符串的长度是否为0

-n s1 测试s1 字符串的长度是否不为0

2)整数的测试:

a -eq b 测试a 与b 是否相等

a -ne b 测试a 与b 是否不相等

a -gt b 测试a 是否大于b

a -ge b 测试a 是否大于等于b

a -lt b 测试a 是否小于b

a -le b 测试a 是否小于等于b

3)文件属性的测试;

-d name      测试name 是否为一个目录

-f name 测试name 是否为普通文件

-e name      测试文件是否存在

 

 

【4】结构性语句:

  1.if…then…fi

1)基本结构:

        if    表达式

        then  

命令表

        fi     

2)多层结构:

if      表达式1

        then

命令表1

        elif    表达式2  

then

命令表2

        fi

3)嵌套结构:

if      表达式

        then

命令表1

        else  

if    表达式

then  

命令表

fi  

        Fi

 

 

注意:

如果表达式为真, 则执行命令表中的命令; 否则退出if语句,

  即执行fi后面的语句。

if和fi是条件语句的语句括号, 必须成对使用;

命令表中的命令可以是一条, 也可以是若干条。

实例:从终端输入3个整数;从小到大排序

 

  2.case...esac

case   字符串变量   in

        模式1)

                命令表1

                ;;

        模式2)

                命令表2

                ;;

             ……

        模式n)

                命令表n

                ;;

Esac

 

注意:

1)case语句只能检测字符串变量

2)命令表以单独的双分号行结束,退出case语句

3)模式 n常写为字符* 表示所有其它模式

4)case匹配项中可以存在多个模式,每种模式之间用|隔开

实例:实现简易计算器功能

 

   3.for..do..done

格式:

for   变量名   in   单词表

        do

            命令表

        done

变量依次取单词表中的各个单词,  每取一次单词, 就执行一次

循环体中的命令.  循环次数由单词表中的单词数确定. 命令表中的

命令可以是一条, 也可以是由分号或换行符分开的多条。

for语句的几种书写格式:

1)for i in 1 2 3 4  do....done :

变量i从单词表中取值

2)for i  do...done:

变量i从命令行取值,可以省略in 单词表

3)for i in {1..10} do...done:

变量i从1-10个数中取值

4)for ((i = 0; i < 10; i++)) do...done:

书写格式类似c语言

 

实例:1-10求和运算

 

4.while..do..done:

格式:

while  命令或表达式

do

            命令表

        done

while语句首先测试其后的命令或表达式的值,如果为真,就执行一次

循环体中的命令,然后再测试该命令或表达式的值,执行循环体,直到该

命令或表达式为假时退出循环。

 

 

 

 

 

5.break和continue:

break:结束本次循环

break  n  则跳出n层;  

continue:结束本次循环继续下次循环

continue  n 则转到最近n层循环语句的下一轮循环上.

 

【3】shell数组

  1.数组的赋值:

a.array=(10 9 8 7 6 5)

b.array=($1 $2 $3...)

c.read a b c

  array=($a $b $c)

d.read -a array

 

  2.数组的调用:

${array[i]} //数组下标从0开始到n-1结束

array[i]=3  //对数组元素重新赋值

${array[@]} //遍历数组

${#array[@]} //计算数组中元素的个数

 

实例:用冒泡排序实现10个数的从小到大排序

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值