sell 基 础

(1)shell可以理解为软件系统提供给用户操作的命令行界面,可以说它是人机交互的一种方式。
(2)我们可以使用shell和操作系统、ubunt等软件系统进行交互。具体来说就是我们通过shell给软件系统输入命令
然后回车执行,执行完成后又会回到shell命令行可以再次输入命令执行。
(3)上述操作方式一般情况下工作很好,但有缺陷。譬如我们要在linux下创建一个文件a.c,可以touch a.c。但是如果我们要在
linux下创建100个文件,分别为a1.c a2.c …a100.c如果这时候还是手工命令行下执行命令创建也可以,但很累。最好的办法
就是把创建过程写成一个shell脚本程序,然后去执行这个shell脚本程序,执行这个程序的效果和手工在命令行输入那些命令效果一样的。

2、shell是一类编程语言(而不是一个语言)linux中以bash为主。
3、脚本语言一般在嵌入式中应用,主要是用来做配置。(一个复杂的嵌入式程序都可配置的,配置的目的是使代码支持多种开发板)
配置过程就是用脚本语言来实现。

4、shell脚本的运行机制:解释运行
(1)C语言主(C++)这种编写过程是:编写出源代码(源代码是不能直接运行的)然后编译链接形成可执行二进制程序,然后才能运行;
而脚本程序不同,脚本程序编写好后源代码即可直接运行(没有编译链接过程)
(2)shell程序是解释运行的,所谓解释运行就是说当我们执行一个shell程序时,shell解析器会逐行的解释shell程序代码,然后一行
一行的去执行。(顺序结构)
(3)CPU实际只认识二进制代码,根本不认识源代码。脚本程序源代码其实也不是二进制代码,CPU也不认识也不能直接执行。只不过脚本程序
的编译链接过程不是以脚本程序源代码为单位进行的,而是在脚本运行过程中逐行的解释执行时才去完成脚本程序源代码转二进制的过程
(不一定是编译链接,因为这行脚本程序可能早就编译连接好了,这里我们只是调用它)

二、动手写第一个shell
2.1、编辑器、编译器、运行方法(脚本的3种执行方法)
(1)shell程序是文本格式的,只要是文本编辑器都可以。但是因为我们的shell是要在linux系统下运行的,所以换行符必须是‘\n’,而windows
下的换行符是“\r\n”,因此windows中的编辑器写的shell不能在linux下运行。所以我们整个课程都是在linux下使用vi编辑器进行编写和调试。
(2)编辑器不涉及,因为shell是解释性语言,直接编辑完就可以运行。
(3)shell程序的运行方法有多种,这里只介绍三种方法:
第一种:./xx.sh,和运行二进制可执行程序方法一样的。这样运行shell要求shell程序必须具有可执行权限chomd a+x xxx.sh来添加可
执行权限。
第二种:source xx.sh,source是linux的一个命令,这个命令是用来执行脚本程序的。这样运行不需要脚本具有可执行权限。
第三种:bash xx.sh, bash是一个脚本程序解释器,本质上是一个可执行程序。这样执行相当于我们执行了bash程序然后把xx.sh作为
argv[1]传给它运行。
2.2 hello world程序解释
(1)shell程序的第一行一般都是:#!/bin/shell这行话以#!开始,后面加上一个pathname,这行话的意思就是指定shell程序执行时被
哪个解释器解释执行,所以我们这里写上/bin/sh意思是这个shell将来被当前机器中/bin目录下的sh可执行程序执行。
可以将第一行写为:#!/bin/bash来指定使用bash执行该脚本。
注意:在ubuntu上面默认使用的解释器是sh而不是bash,而是dash。dash是ubuntu中默认使用脚本解释器。
(3)脚本中的注释使用#开头,和C语言中//相似。

2.3shell并不神秘
(1)shell就是把以前命令行中键入执行的命令写成了程序。shell其实就是为了避免反复在命令行手工输入而发明的一种将手工输入步骤
记录下来,然后通过shell脚本程序就能再次复述原来记录的手工输入过程的一种技术。

三、shell编程学习1
1、shell中使用linux命令
(1)练习1:当前目标下创建文件a.txt
(2)练习2:当前目录下创建文件夹dir,dir下创建文件b.txt
总结:以上2个练习的目的是让我们基本学会脚本,明白脚本编程其实是把以前在命令行下输入的命令挪到脚本程序中去然后一次执行。

2、shell中的变量定义和引用
(1)变量定义和初始化。shell是弱类型语言(语言中的变量如果有明确的类型则属于强类型语言;变量没有明确类型就是弱类型语言),
和C语言不同。在shell编程中定义变量不需要制定类型,也不有类型这个概念。
(2)变量定义时可以初始化,使用“=”进行初始化赋值。在shell中赋值的=两边是不能有空格的。
注意:shell对语法非常在意,非常严格,很多地方空格有无都是必须的,不能随意添加或省略空格。
(3)变量赋值,变量定义后可以再次赋值,新的赋值会覆盖老的赋值。shell中并不刻意区分变量的定义
和赋值,反正每个变量就是一个符号,这个符号的值就是最后一个给他赋值时的值。
(4)变量引用
shell中引用一个变量必须使用 符 号 , 符号,

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中,`Runnable`和`Thread`是两个与并发编程密切相关的概念,它们用于实现多线程。`Runnable`是一个接口,而`Thread`是一个类,它们都用于创建和管理线程。 1. **Runnable接口**: `Runnable`接口定义了一个名为`run()`的方法,这是线程执行的主要任务代码块。你可以创建一个实现了`Runnable`接口的类,并在其`run()`方法中放置你的业务逻辑。使用`Runnable`的优势在于,它可以让你的类继续继承其他父类,避免了单继承的限制,而`Thread`类则不提供这样的灵活性。 例如: ```java public class MyRunnable implements Runnable { public void run() { // 你的线程执行代码 } } ``` 2. **Thread类**: `Thread`类是一个直接的类,它包含了一个运行的线程实例。当你创建一个`Thread`对象并调用其`start()`方法时,线程会启动并执行其内部的`run()`方法。可以直接实例化`Thread`并传递一个`Runnable`对象: ```java Thread thread = new Thread(new MyRunnable()); thread.start(); ``` 3. **卖点(Sell Point)**: 使用`Runnable`和`Thread`的主要卖点包括: - **代码重用**:通过`Runnable`接口,你可以将线程代码封装在一个独立的类中,提高代码的复用性。 - **线程安全**:`Thread`和`Runnable`允许你在多个线程间共享数据,但需要注意同步机制以防止竞态条件。 - **扩展性**:通过`Runnable`,你可以从其他类继承,同时执行线程操作。 **相关问题**: 1. 什么时候使用`Runnable`而不是直接继承`Thread`? 2. 如何通过`Thread`类启动一个使用`Runnable`实现的任务? 3. `Runnable`和`Thread`在多线程中的生命周期有何不同?

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值