Shell语言学习

**

1.shell是一种脚本语言**

脚本语言是一种解释性的语言,例如Python、vbscript、javascript、installshield script、ActionScript等等,它不像c\c++等可以编译成二进制代码,以可执行文件的形式存在,脚本语言不需要编译,可以直接用,通常以文本(如ASCII)保存,只在被调用时进行解释或编译

2.shell定义变量

shell中所有的类型都是字符串

在定义变量时通常不需要指明类型,直接赋值就可以,且变量名一般大写

VAR=value (如果value值中包含了空白符则必须使用引号括起来)
VAR=‘value’
VAR=“value”
注意,赋值号的周围不能有空格

3.使用变量

a.直接用$符号引用一个已经定义过的变量

    $VAR或者${VAR}
    {}可以去掉的,但是还是推荐加上,为了帮助解释器识别变量边界
    echo "do you want  ${VAR}Script  "  如果不加编译器会将VARScript当成一个变量,其值为空

b.已经定义过的变量也可以重新被赋值
可以使用readonly将变量定义成只读变量
rendonly VAR=value

c.单引号与双引号的区别
单引号:只会将单引号中的内容原样输出
双引号:会解析其中的命令(需要反引起来),变量,再输出

d.将命令结果赋值给变量
VAR=command
VAR=$(command)

e.删除变量
unset删除变量,但不能删除只读变量
unset VAR
**
在这里插入图片描述

4.变量类型

1)局部变量
局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2) 环境变量
所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
3) shell变量
shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

**

5.运算符类型

1.算术运算符

VAR=`expr $a + $b`
VAR=`expr $a - $b`
VAR=`expr $a \* $b`
VAR=`expr $a / $b`
VAR=`expr \`expr $a + $b\` \* \`expr $a - $b\``

2.关系运算符
只适用于字符串是数字的类型
-eq 等于则返回ture
-ne 不等于则返回ture
-gt 大于则返回ture
-lt 小于则返回ture
-ge 大于等于则返回ture
-le 小于等于则返回ture

3.布尔运算符

!
-a是或运算
-o是与运算

4.字符串运算符
在这里插入图片描述

5.文件测试运算符

先来复习一下, linux系统中文件类型
a.普通文件 -
b.目录文件 -d
c.块设备文件 b 就是存储数据以供系统存取的接口设备,简而言之就是硬盘

块设备一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,linux 内核中,块设备将数据存储与固定的大小的块中,每个块都有自己的固定地址,使用其他缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区。

在这里插入图片描述
(1)当一个用户程序要向磁盘写入数据时,会发出write()系统调用给内核。
(2)内核会调用虚拟文件系统相应的函数,将需要写入***文件描述符和文件内容指针***传递给该函数。
(3)内核***需要确定写入磁盘的位置***,通过映射层知道需要写入磁盘的哪一块。
(4)根据磁盘的文件系统的类型,调用不同文件格式的写入函数,将数据发送给通用块层(比如ext2和ext3文件系统的写入函数是不同的,这些函数由内核开发者实现,驱动开发者不用实现这类函数)
(5)数据到达通用块层后,就对块设备发出写请求。内核利用通用块层的启动I/O调度器,对数据进行排序。
(6)同用块层下面是"I/O调度器"。调度器作用是把物理上相邻的读写合并在一起,这样可以加快访问速度。
(7)最后快设备驱动向磁盘发送指令和数据,将数据写入磁盘。

d.字符设备文件 c 串行端口的接口设备,如键盘鼠标等
e.套接字文件 s
f.管道文件 p

用于不同进程间通信,当两个进程需要数据传输时,就需要用到管道文件,一个进程将需要的数据写入管道的一端,另一个进程则从管道的另一端读取.

g.连接文件 i

在这里插入图片描述
6.字符串运算符

在这里插入图片描述
**

6.Shell中的数组

   a.直接对数组全部定义
   b.对数组成员进行定义
Arry=(4 6 we sre yui juhg)     (中间用空格隔开)
Arry[0]=4

```.1.获取数组的长度    ${#Arry[*]}
    2.数组所有的元素    ${Arry[*]} 或 ${ARR[@]}
    3.遍历数组
     for E in ${Arry[**]}
     do
       echo  ${E}
     done
     4.数组作为参数传递给脚本
     sh arr2.sh "{$arr[*]}" 

**

7.流程控制语句

   **

1.if 判断语句,case语句

(有三种形式)
注意:写条件判断式时要注意项之间的空格


**1.**
if [ 条件判断式 ];then 
  程序 
fi 
或者:
if [ 条件判断式 ] 
  then 
    程序 
fi
**2.**
if [ 条件判断式 ] 
  then 
    程序1
  else
    程序2 
fi
**3.**
if [ 条件判断式1 ] 
    then 
      程序1
  elif [ 条件判断式2 ]
    then
    程序2 
  elif [ 条件判断式3 ]
    then
    程序3
  else
    程序4
fi


case ${WORD} in
  start)
    echo "starting"
    ;;
  stop)
    echo "stoping"
    ;;
  *)
    echo "[start|stop]..."
esac

**

2.for语句,while语句

for N in 1 2 3
do
  echo ${N}
done


for N in {1..5}
do
  echo ${N}
done


for ((i=1;i<=5;i++))
do
  echo ${i}
done


while ((i<=5))
do
  echo ${i}
  ((i++))
done

**

8.Shell函数定义与使用

function fn { #fn为函数名字,在这里()可以省略,如果只写了函数名字而不写function时,()则不能省略
  echo ""
  return 1  (0-127) # 这个返回值理解为是一个状态码 ,脚本不能 return 。 通过函数的返回结果表示脚本执行的结果,
                    # **可写可不写,写了可以通过echo $?来获取当前return**
}
#函数调用
#若没有传递参数,则直接使用名字fn,若有传递参数则后面跟参数

**局部变量是在函数内部使用的变量,在变量声明前面冠以 local 关键字。如果脚本在函数外部有同名变量,那么 shell 将能区分开这两个变量

**{**复习一波有关变量的知识

shell中变量分成环境变量(全局变量)和普通变量(局部变量)

环境变量也称为全局变量,可以在创建他们的Shell及其派生出来的任意子进程Shell中使用,
环境变量又可以分为自定义环境变量和bash内置的环境变量,环境变量可以在命令行中设置和创建,用户退出命令行时这些变量值就会丢失,想要永久保存环境变量,可在用户家目录下的. bash_profile或. bashrc(非用户登录模式特有,如:SSH)文件中,或在/etc/profile文件中定义,这样每次用户登录时这些变量都将被初始化。

普通变量也可成为局部变量,只能在创建它们的Shell函数或Shell脚本中使用,普通变量一般由开发者在开发脚本程序时创建

}

函数名在变量 $0 中定义, 函数命令行的其他参数使用变量 $1,$2…,由于函数为自己的参数值使用专用的参数环境变量,所以函数无法从脚本命令行直接访问脚本参数值。如果想在函数中使用这些值,那么必须在调用该函数时手动传递这些数据。
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习Ubuntu中的Shell语言可以帮助你更好地使用Linux系统。Shell是一种命令语言和程序设计语言,它提供了一个界面,让用户可以通过命令来访问操作系统内核的服务。在Ubuntu中,常见的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是最常用的Shell,也是大多数Linux系统默认的Shell。 在学习Shell语言时,你可以了解一些基本操作指令,如变量的使用、只读变量、删除变量、变量类型、字符串操作等\[1\]。此外,你还可以学习Shell的流程控制,包括if-else语句、for循环、while语句、until循环、case...esac语句等\[1\]。 另外,了解bashrc和profile的区别也是学习Shell语言的一部分。bashrc用于交互式non-login shell,而profile用于交互式login shell\[2\]。它们都用于保存用户的环境信息。在Ubuntu系统中,存在多个bashrc和profile文件,它们分别用于不同的环境。 在Shell编程中,还需要了解变量的作用范围。Shell中存在三种变量:局部变量、环境变量和Shell变量\[3\]。局部变量在脚本或命令中定义,仅在当前Shell实例中有效;环境变量可以被所有程序访问,包括Shell启动的程序;Shell变量是由Shell程序设置的特殊变量,包括环境变量和局部变量。 总之,学习Ubuntu中的Shell语言可以帮助你更好地使用Linux系统,掌握基本操作指令、流程控制和变量的使用。你可以通过阅读相关文档和教程,以及实践编写Shell脚本来提升自己的Shell编程技能。 #### 引用[.reference_title] - *1* *3* [【Ubuntu】shell基本操作指令(二)](https://blog.csdn.net/m0_59681237/article/details/127199911)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Ubuntu_shell 学习](https://blog.csdn.net/Kukafee/article/details/88280264)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值