shell编程

本文介绍了Shell编程的基础知识,包括Shell的用途、命令的存放路径、编写Shell脚本的步骤,以及Shell语法的重点,如printf、read、变量规则和类型。还详细讲解了Shell中的控制流语句,如循环(for、while、until)和分支(if-else、case)。此外,提到了字符串处理、重定向和信号捕捉(trap)的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作用:shell是贝壳的意思,贝壳内部就是操作系统的内核,贝壳外部就是用户,shell其实就是用户与内核交互的的一种工具。

2.shell命令

1)shell命令大部分被存放在系统的默认路径 /bin(usr/bin)

2)linux所有命令使用解释器bash进行解析 查看bash解析器所在位置   (在终端输入 which bash )

在写shell脚本的时候,第一行加  #!/bin/bash

3.Shell编程(使用linux下的编辑器gedit 或者 vi)

1)后缀:.sh   不需要编译(如gcc

         2)从编译到运行的步骤

编辑文件 ->hello.sh   修改权限 ->chmod 777 hello.sh  执行脚本文件-> ./hello.sh

Shell语法

1.Printf();è echo 

2.read var è   scanf(“%d”,&var)

echo命令是可以在输出的字符串中添加换行符 \n, 制表符 \t, 不换行 \c(echo命令默认在输出后换行),在使用这些符号时,需要在前面指定参数 -e

例如:echo -e  “GZFX2107\nJAY\t192.168.15.255”

2.变量命名规则

与c语言相似 只能由数字,字母,下划线组成,不能是数字开头

  1. shell变量的声明

shell变量声明是不需要指定类型的,数据的默认类型都是字符串类型

c语言:int i

shell: str

  1. shell变量的赋值

c: int i=100;

shell: str=hello(shell赋值时,等号两边不能有空格)

  1. 变量的引用 -> 在变量名前加上 $

例如: str=hello

      echo $str

  1. Shell变量的种类

C:局部变量  全局变量  静态变量

Shell下变量种类:

    1. 用户自定义的变量 例如:str=hello
    2. 系统环境变量 例如 PATH
  •   可以通过env查看系统环境变量
  1. 命令行变量 $#  $*(类似于c语言中的argc和 argv)

C: int main (int argc ,char *argv[])

Argc:命令行参数格式

Argv:命令行参数内容

==》 ./hello  aaa bbb

Argc=3 argv[0]=./hellow    argv[1]=aaa  argv[2]= bbb

  Shell: ./shell.sh  aa bb

$#:外部参数个数 2个(不包含 ./hello.sh

$*:外部参数的内容 aa bb

$n:数字n代表第几个参数 $1 àaa ;$2àbb

$?:上一个shell命令执行的返回值,成功返回0,失败返回非0

$$:代表当前的进程ID

Shell编程常用的符号

  1. 双引号 “”

==> 双引号的作用是将某些字符序列转成字符串类型。

==> 如果需要表示的字符串有空格,那么必须使用双引号修饰,

==> str=helloworld    str=”hello world”

==> str=”helloworld” 

  1. 反引号 ``

==> 在双引号中的可以直接使用$对变量进行引用,但是如果需要使用shell命令,那就需要使用反引号进行修饰。

例如:echo “date is `date`”

       Str=`cat 1.txt`  //把1.txt的内容赋值给 str

    3.read   var    //scanf(“%d”,&var);

3.重定向 >(重定向)  <(重定向)   >>(追加重定向)

==>    作用:将某些命令的运行结果重定向到某个文件中

系统默认打开的文件描述符

文件描述符 对象

标准输入 0 键盘

标准输出 1 屏幕

标准出错 2 屏幕

==> 例如: ls 命令 的对象默认时标准输出

==> 例子: 将ls的信息重定向到文件1.txt中

注意: > 会将原来文件中的内容先清空,再把新的数据填入进去。

追加重定向 >> : 就会把数据追加到文件的末尾

例如: 现在想要写入一句话 “helloworld” 到文件1.txt

  1. 把1.txt清空再写入   echo “helloworld” > 1.txt
  2. 把1.txt追加写入   echo “helloworld” >> 1.txt

Shell编程的控制流语句

  • shell编程的控制流语句

C语言中的控制流语句

循环: while;  do-while;  for

分支:if - else;  switch - case;

Shell里面的控制流语句

循环: for;  while;  until;

分支: if - else  case

测试语句 test  ==> shell中对文件,数值,字符串进行判断的语句

 

 

Shell的if语句

  1. shell里面的if - else 分支语句

格式:

If  判断条件1

then

Xxx; //执行语句1

elif 判断条件2

then

Xxx; //执行语句2

else

Xxx; //执行语句3

fi //if语句的结束标志

==>特点:

  1. 每一个if语句都必须由一个fi作为结束标志
  2. If 语句后面的条件为真的时候,才会执行then后面的语句
  3. If 判断条件; 等价于 if 判断条件   加不加分号都可以

Shell分支语句中的case(c中的swich

, 分支语句case  

格式:

case  value  in

  1. 语句1 ;; //拿value与A进行比较,如果相等,那就执行语句1
  2. 语句2 ;; //拿value与B进行比较,如果相等,那就执行语句2
  3. 语句3 ;; //拿value与C进行比较,如果相等,那就执行语句3

*) 语句4 ;;  //*是一个通配符,相当于C语言里面的defalut

esac

注意:

  1. Case语句只有case,没有switch
  2. Case语句中没有break, 每一个分支的结尾使用 ;;
  3. Case 语句结尾使用 esac结尾

Shell循环语句for

循环语句for

格式:

For value in arg  #一次从arg中获取一个值给value

Do

Xxx

Done;

注意:for循环执行的次数与arg中的数量有关,有多少数值就循环多少次。

例子:将外部传参的值打印出来。

Shell循环语句while

  1. 循环语句 while

格式

while  循环条件 #条件为真时一直循环

do

Xxx;

Done

例子:输出1-100所有的奇数

 

Shell循环语句until 循环 --> 一直循环,直到某种情况的发生

格式

until 判断条件 #==>当判断条件成立的时候,结束循环

do

Xxx;

Done

 

hell其他

  1. 字符串长度获取

C语言 :  strlen(str) ==> 返回字符串str的长度

Shell : ${#str}  ==> 获取str字符串长度

  1. 字符通配符 ==》 匹配字符的符号

* : 任意长度任意字符的字符

? : 任意一个字符

  1. z] : 代表一个范围  a ~ z

[^abcd] : 代表一个指定范围之外的字符

[abc] : 代表一个指定范围之内的字符

%% : 表示从右到左匹配尽可能多的字符

% : 表示从右到左匹配尽可能少的字符

## : 表示从左到右匹配尽可能多的字符

#: 表示从左到右匹配尽可能少的字符

  1. 删除字符串左边的字符

例如: str=hello123a20world

Level=${ str##[a-z]20 } #--> 从左到右一直删除字符,直到碰到 小写字母+20的时候结束,把这两个删除就停止。

Trap:信号捕捉 -》 类似于c语言里面的signal

格式:trap 函数名 信号值

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值