linux 进程、执行方式、程序、编程元素

1、进程:

  • shell应用程序的进程一般为交互式的,在广义上分为GUI和CLI
  • GUI(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面,支持鼠标,桌面等外设,比较著名的windows、Android
  • CLI(command-line interface,命令行界面)是指可在用户提示符下键入可执行指令的界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行。
  • CLI的词法一般由 命令,选项,参数组成,分为内建命令和外部命令

2、执行方式:

  • 由于Linux的脚本或程序源文件一般为文本文件,所以在执行Linux脚本的时候一般分为两种方式:
  • ①编译执行:预处理-->编译-->汇编-->链接-->二进制程序文件或可执行文件。代表有:C, C++
  • ②解释执行:由解释器全程参与运行过程,每次读取一行,运行一行。代表有:Python和bash
  • Python:一般有写好的编程库,用户通过写程序控制结构,调用编程库完成程序编写;
  • 库文件:一般为功能模块,在编程中可直接调用也可以通过其API进行调用。
  • Bash:需要从零开始编写,也是程序控制结构,但是需要调用机器上命令程序文件进行程序编          写;
  • 外部命令:一般由各应用程序提供;

3、程序:一般为为达到某种用户的目的而编写的指令和数据或算法和数据的集合

  • 根据侧重点不同可以分为过程式编程和对象式编程:
  • 过程式编程:以指令为中心,设计算法,数据服务于算法;
  • 对象式编程:以数据为中心,设计数据结构(类),程序服务于数据结构;
bash 根据不同情况可以将bash编程按执行类别分为三类:
顺序执行:逐个执行
选择执行:只执行其中一个分支 if...fi,if...elif...else...fi
循环执行:一段代码要执行0,1或多遍 while,if...elif...else...fi

bash的编程元素:变量、流程、函数

①变量:根据不同情况可以分为 本地变量、环境变量、局部变量、位置参数变量以及特殊变量(内置变量)

变量的命名规则:只能包含数字、字母和下划线;且不能以数字开头;

引用变量:${name}, $name

变量的引用:

弱引用: "", 其内部的变量引用会被替换为变量值;

强引用:‘‘,其变量的变量引用会保持原有字符;

命令引用:`COMMAND`, $(COMMAND),引用命令的执行结果;

声明为整型:

declare -i name=[value]  -i:整型变量

let name=value

查看所有变量:set

销毁:

自动销毁:shell进程终止;

手动销毁:unset name

bash的变量使用特点:弱类型、无须事先声明;

本地变量:在用户现在的shell生命期的脚本中使用,只在用户当前shell生命期有意义。如果在shell     中启动另一个进程或退出,此值将无效。这个方法的优点就是用户不能对其他的shell或进     程设置此变量有效。

设置一本地变量,格式为:

$ variable-name=value 或 $ {variable-name=value}

variable-name:变量名

=:赋值符号

value:变量值

注意:等号两边可以有空格。如果取值包含空格,必须用双引号括起来。shell变量可以用大小写字母      ,使用变量时,如果用花括号将之括起来,可以防止shell误解变量值。(具体见内容一)

环境变量:被“导出”的本地变量,可以在所有的用户进程中使用。登录进程是父进程,shell进程是          子进程。父进程初始化环境变量,子进程就都可以使用了。

环境变量的配置文件

/etc/profile(作用于所有用户) or /home/user/.bash_profile(作用于user用户)

变量声明的命令:

export name=[value]

declare -x name[=value]  -x:环境变量

查看所有环境变量:env, printenv, export

销毁:unset name  (具体见内容二)

局部变量:被限定在创建它们的shell中。local函数可以用来创建局部变量,但仅限于函数内使用。           局部变量可以通过简单的赋予它一个值或一个变量名来设置,用declare内置函数来设置,          或者省略也可,某个函数执行过程;

declare 变量名=值

位置参数变量:在脚本中引用传递给脚本的参数;在函数中引用传递给函数的参数;参数相关数目传入脚本,此数目可以任意多,但只有前9个可以被访问,使用shift命令可以改变这个限制;参数从第一个开始,在第九个结束;每个访问参数前要加$符号;第一个参数为0,表示预留保存实际脚本名字;无论脚本是否有参数,此值均可用.

$0:脚本名字。此变量包含地址,可以使用basename $0获得脚本名称。

$1:第一个参数

$2,$3,$4,$5,...一次类推。

特殊变量:$?, $*, [email protected], $#, $$,$-,$!

特定shell变量如下:

$# 传递到脚本的参数个数;

$* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个;

$$ 脚本运行的当前进程ID号;

$! 后台运行的最后一个进程的进程ID号;

[email protected] 与$*相同,但是使用时加引号,并在引号中返回每个参数;

$- 显示shell使用的当前选项,与set命令功能相同;

$? 显示最后命令的退出状态.0表示没有错误,其他任何值表明有错误;

[[email protected] ~]# echo $$
31253
[[email protected] ~]# echo $-
himBH
[[email protected] ~]# echo $?
0
内容一:
[[email protected] ~]# name=nicai   #设定本地变量
[[email protected] ~]# echo $name   #打印输出
nicai
[[email protected] ~]# bash      #进入下一级本地变量
[[email protected] ~]# echo $name

[[email protected] ~]# exit
exit
[[email protected] ~]# echo $name 
nicai
[[email protected] ~]# 
[[email protected] ~]# pstree
systemd─┬─AliHids───9*[{AliHids}]
        ├─AliYunDun───8*[{AliYunDun}]
        ├─AliYunDunUpdate───6*[{AliYunDunUpdate}]
        ├─agetty
        ├─crond
        ├─dbus-daemon
        ├─gshelld───3*[{gshelld}]
        ├─iprdump
        ├─iprinit
        ├─iprupdate
        ├─lvmetad
        ├─nscd───7*[{nscd}]
        ├─ntpd
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd───sshd───bash───pstree  #有内容的本地变量
        ├─systemd-journal
        ├─systemd-logind
        └─systemd-udevd
[[email protected] ~]# bash
[[email protected] ~]# pstree
systemd─┬─AliHids───9*[{AliHids}]
        ├─AliYunDun───8*[{AliYunDun}]
        ├─AliYunDunUpdate───6*[{AliYunDunUpdate}]
        ├─agetty
        ├─crond
        ├─dbus-daemon
        ├─gshelld───3*[{gshelld}]
        ├─iprdump
        ├─iprinit
        ├─iprupdate
        ├─lvmetad
        ├─nscd───7*[{nscd}]
        ├─ntpd
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd───sshd───bash───bash───pstree
        ├─systemd-journal
        ├─systemd-logind
        └─systemd-udevd
[[email protected] ~]#
内容二:
[[email protected] ~]# name=nicai   #本地变量
[[email protected] ~]# echo $name
nicai
[[email protected] ~]# bash
[[email protected] ~]# echo $name

[[email protected] ~]# exit
exit
[[email protected] ~]# echo $name
nicai
[[email protected] ~]# export name[=aaa]
-bash: export: `name[=aaa]‘: not a valid identifier
[[email protected] ~]# export name=[aaa] #环境变量
[[email protected] ~]# echo $name
[aaa]
[[email protected] ~]# bash
[[email protected] ~]# echo $name
[aaa]
[[email protected] ~]# 
[[email protected] ~]# env
XDG_SESSION_ID=466
HOSTNAME=iZ28qzns9m4Z
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000
SSH_CLIENT=61.182.229.120 60276 22
SSH_TTY=/dev/pts/0
USER=root
name=[bbb]
...
[[email protected] ~]# unset name
[[email protected] ~]# echo $name

[[email protected] ~]#
时间: 2024-11-10 14:26:16

linux 进程、执行方式、程序、编程元素的相关文章

linux 2440 LCD 应用程序编程

一.Linux的帧缓冲设备 帧缓冲(framebuffer)是 Linux 为显示设备提供的一个接口,把显存抽象后的一种设备,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作.这种操作是抽象的,统一的.用户不必关心物理显存的位置.换页机制等等具体细节.这些都是由Framebuffer 设备驱动来完成的.帧缓冲驱动的应用广泛,在 linux 的桌面系统中,Xwindow 服务器就是利用帧缓冲进行窗口的绘制.尤其是通过帧缓冲可显示汉字点阵,成为 Linux汉化的唯一可行方案. 帧缓冲设备对

linux c 执行新程序

学习进程时,linu c上说新开的进程一般要执行另外一个程序,同时与父进程执行同一个程序没有意义 如下是如何执行一个新的程序 使用exec函数簇 exec函数簇包含如下函数 编写两个代码文件,其中使用exec_execve代码产生一个子进程来调用另一个程序processimage,代码如下 /***exec_execve.c*/#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <

linux shell执行方式

linux shell执行有两种方式 shell脚本以#!/bin/bash开头,执行shell时先检查首行,在内部以下列方式执行: $/bin/bash script.sh 1. 使用sh执行. $sh script.sh #脚本位于当前目录下 或者 $sh /home/path/script.sh #使用完整路径 2. 独立运行脚本. 需要具备可执行权限,可以通过下面的方式设置 $chmod a+x script.sh 或者 $chmod 755 script.sh 然后可以通过下列方式执行

Linux下执行Java程序

在linux下编译java程序,执行javac编译生成class文件时,在centos7终端输入如,javac hello.java    会提示未找到指令,但用java -verison测试环境变量是没问题的 百度了好久,说的很复杂,重新再linux配置环境变量,输入 vi /etc/profile进入,添加以下代码: export JAVA_HOME=/usr/local/jdk1.8.0_144 export PATH=$JAVA_HOME/bin:$PATH export CLASSPA

Linux进程编程基础介绍

Linux系统是一个多进程的系统,它的进程之间具有并行性.互不干扰等特点.也就是说,每个进程都是一个独立的运行单位,拥有各自的权利和责任.其中,各个进程都运行在独立的虚拟地址空间,因此,即使一个进程发生异常,它也不会影响到系统中的其他进程. Linux进程是一个具有独立功能的程序关于某个数据集合的一次可以并发执行的运行活动,是处于活动状态的计算机程序.进程作为构成系统的基本细胞,不仅是系统内部独立运行的实体,而且是独立竞争资源的基本实体. Linux进程是一个程序的一次执行的过程,同时也是资源分

linux进程(1)--进程运行的环境

linux进程(1)–进程运行的环境 标签(空格分隔): linux 以下内容来自<UNIX环境高级编程>读书笔记 前引 首先想想下面几个问题能不能解答: 当程序被执行的时候,main函数时如何被调用的? 程序在内存的存储空间布局是怎样的? 命令行参数时如何传递给新程序的?进程如何读取环境变量? 进程堆空间的使用 进程的终止方式 进程是程序执行的基本,进程即为程序执行的活动体.下面是进程在系统上运行的一些环境. 一.main函数 int main(int argc, char *argv[])

Linux进程详解

本文实际上是 "UNIX环境高级编程" 的读书笔记. 所以许多细节并没有表述出来, 想要刨根问底的同学建议再看看原书. 之所以把读书笔记贴到博客上, 出于两个目的: 1. 加深自己的学习效果. 2. 提供一个快速浏览的方式. 本文提到的技术在下面的环境中实际验证过: Linux version 2.6.18-164.el5 x86_64 GNU/Linux (gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)) 程序和进程 程序是指磁盘上的可执行

[linux]进程(十一)——进程权能

进程权能介绍进程权能举例分析 用户层对应的系统调用是prctl()函数,点击打开链接 1,基本概念传统UNIX的访问控制模型非常简单,就是“超级用户对普通用户”模型.在这种模型中,一个进程或帐户要么什么都能做即具有全部的系统权限,要么几乎什么也不能做即只有很小的权限,这取决于进程的UID.例如,如果一个进程需要加载/卸载内核模块以及管理文件系统等操作时,就需要完全的root权限.很显然这样做对系统安全存在很大的威胁.2,进程权能Linux是如何使用POSIX capabilities代替传统的信

linux进程编程:子进程创建及执行函数简介

子进程创建及执行函数有三个: (1)fork();(2)exec();(3)system();    下面分别做详细介绍.(1)fork()    函数定义:    pid_t fork();    函数说明:    linux下进程在内存中由三部分数据组成:代码段.数据段.堆栈段.在一个进程中,调用fork函数,可以创建.启动一个新进程.新进程与父进程共享代码段,复制父进程的数据段和堆栈段.创建成功后,fork()会向两个进程都有返回值.向父进程的返回值为子进程的进行号,向子进程的返回值为0.