Shell编程基础知识(一)

一.基本的运行Linux程序的3种方法:

(1) 使文件具有可执行权限,直接运行文件。eg:  chmod a+x testfile.sh   ./testfile.sh

(2) 直接调用命令解释器来执行程序。eg: python testfile.sh   (根据文件开头声明的命令解释器进行调用)

(3) 使用source执行文件  eg:  source testfile.sh   .testfile.sh  (t通常用于重新执行刚修改的初始化文件,使之立即生效)

Shell的命令有3种:内建命令,Shell函数和外部命令。

(a).内建命令:Shell程序本身包含的命令,这些命令集成在解释器中。部分内建命令的存在是为了修改Shell的属性设置(环境变量),在执行内建命令的时候,没有进程的消失和创建;另一部分内建命令则是I/O命令,eg. echo命令。

(b).Shell函数就是一系列代码,以Shell函数写成,可以被其他命令引用。

(c).外部命令是独立于shell的可执行程序。例如 find,grep。命令shell在执行外部命令时,会创建一个当前Shell的复制进程来执行。执行过程中,存在进程的创建和消失。(子进程创建初期和父进程一样环境,但是子进程不能改变父进程的参数变量)

外部命令执行过程:

1.调用POSIX系统fork函数接口,创建一个命令行Shell进程的复制(子进程);

2.在子进程的运行环境中,查找外部命令在Linux文件系统中的位置,如果外部命令给出了完全路径,则跳过查找这一步;

3.在子进程里,以新程序取代Shell复制并执行(exec),此时父进程进入休眠,等待子进程执行完毕;

4.子进程执行完毕后,父进程接着从终端读取下一条命令。

二.Linux Shell的变量

  Linux shell并不对变量区分类型。一切值都是字符串,并且和变量名一样,值并没有字符长度限制。更加神奇的是,bash也允许比较操作和整数操作。其中关键因素是:变量中的字符串值是否为数字。

单双引号引用问题:单引号是强引用,双引号是弱引用(强引用就是禁止变量替换,弱引用就是可以进行变量替换)

eg:

$var=123
echo ‘$var‘       #此处是单引号,故结果是$var
$var
echo  "$var"     #双引号,结果为123
123

在Shell世界中,变量可以是空值("NULL"值),就是不包含任何字符。但是在算术操作中,未初始化的变量为0。

eg:

echo "$uninit"            #未初始化变量
                                #此行为空,没有输出
let    "$uninit+=5"       #未初始化变量加5
echo  "$uninit"
5                          

Linux Shell中的变量根据影响范围分为两种:局部变量和全局变量。

局部变量:可见范围为代码块或者函数中,且必须用local声明,否在在代码块中,也是全局可见。

全局变量:全局可见,不需要添加修饰词,环境变量是全局变量的一种。

eg:

#! /bin/bash
#测试全局变量和局部变量的适用范围
num=123
func1()
{
num=321                #在代码中声明的变量
echo $num
}
func2()
{
local num=456         #声明为局部变量
echo $num
}
echo $num               #显示初始时的num变量
func1()
echo $num
func2()
echo $num

运行结果:

123
321
321
456
321

三.环境变量的相关操作

  每次当运行一个Shell时,它都会创建适合自己的环境变量的shell变量。或者更新添加一个新的环境变量的时候,这个Shell都会立即更新它自己的环境,让所有后继子进程都能够继承这个环境变量。

  一个脚本只能够export变量到这个脚本所产生的子进程,也就说只能对这个脚本所产生的命令和进程起作用。如果脚本是从命令行中被调用的,那么这个脚本export的变量是不能够影响命令行环境的,即子进程是不能够export变量来影响产生自己的父进程的环境的。但是source命令执行脚本时,因为没有子进程的产生,故可以立即同步执行环境。

export命令用于设置或者显示当前Shell进程的环境变量,作用时间仅仅是当前Shell消亡前。

语法:export  [-fnp]  [变量名称]=[变量值]

-f:代表[变量名称]中为函数名称。

-n:删除指定的变量。(变量实际上并未删除,只是不输出到后续指令的执行环境中)

-p:列出所有的Shell赋予程序的环境变量。

如若想永久设置环境变量,在启动文件(/etc/profile,/etc/bashrc)相对应的文件中进行设置。

eg:

#设置环境变量PATH
export PATH=/bin:/usr/bin:/usr/local/bin

env命令在未提供command时,显示所有的变量名称和值;提供command时,根据参数重建环境变量后,在新的环境中运行command。

语法:env   [OPTION]... [-]  [NAME=VALUE]...    [COMMAND  [ARG]...]

-i:不带环境变量启动(--ignore-environment)

-u:从环境变量中删除一个变量(--unset=NAME)

unset命令从当前Shell删除函数或者变量。

语法:unset  [-v] variable..

unset-f   function..

-v:默认选项,删除指定的变量。

-f:删除函数操作,参数为函数名称。

Env函数和set函数不同。Env函数显示的环境变量,而set函数显示的是所有本地变量,包括用户定义的变量。

一些常用的环境变量有:

HOME:用户的专属目录,在Linux中用~扩展。

PATH:外部命令的搜索路径。

HISTSIZE:保存历史命令记录的太条数。

LOGNAME:当前用户的登录名。

HOSTNAME:主机的名称。

SHELL:当前用户使用shell的类型。

MAIL:当前用户的邮件存放目录。

LANG/LANGUAGE:语言相关的环境变量,使用多种语言的用户可以修改此变量。

PS1/PS2:PS1是基本提示符,对于root用户是#,对于普通用户是$。PS2是负数提示符默认是>。

一般来说,PATH变量中存储路径以:分开,路径中至少包含/bin和/usr/bin这两个目录。当Shell接收到一个命令非内部命令时,也没有给出完整路径时,Shell则在Path变量中从左到右依次搜索目录,如果有一个命令在两个不同目录中都有,则在前面一个会被执行。

原文地址:https://www.cnblogs.com/Kluas/p/9783559.html

时间: 2024-10-18 20:27:38

Shell编程基础知识(一)的相关文章

shell编程基础知识

什么是shell shell是一个命令解释器,它在操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出屏幕返回给用户 shell对话方式 交互的方式:从键盘输入命令,通过/bin/bash的解析,可以立即得到shell的回应,一问一答的方式 非交互式:shell脚本 为什么使用shell编程! shell编程是实现linix.UNIX系统管理及自动化运维必备的重要工具,可以把繁琐重复的命令写到shell脚本中执行,节约时间,有效的提高运维人员

linux下shell编程基础知识

1.history    记录历史命令: 预设记录1000条命令,存储在用户家目录 .bash_history 文件中: !!     执行上一条命令 !n    n为数字,history里面显示的指令数字 !cat    执行最近一次以cat开头的命令 !$    上一条命令的最后一个参数 man builtin    可以查询系统内置的所有命令: 2.指令和文件名补全 Tab键    连续按2次列出所有的指令或文件名: 3.别名alias 自定义别名,把很长的经常使用的命令别名一个简单的命令

shell编程基础知识2

1.一维数组 定义:A={test1 test2 test3} 引用:echo ${A[0]} 表示引用第一个数组变量 echo ${A[1]} 表示引用第二个数组变量 显示数据参数:echo ${A[@]} 显示参数个数 echo ${#A[@]} 替换数组元素 echo ${A[@]/tets2/test5} 原文地址:https://www.cnblogs.com/hdc520/p/10209561.html

unix环境高级编程基础知识之第一篇

陆陆续续看完了圣经第一章,熟悉了unix的整个编程流程,c语言的用处在这里得到伸张. 从unix的体系结构,原来操作系统包括内核及一些其他软件,我们常常误称为linux内核为操作系统,这俨然成为一种共识.基本熟悉了shell的介绍,主流的是bash(Bourne-again shell),unix的文件的基本操作,出错处理,用户ID,信号(感觉类似windows的消息),时间值,最后还有系统调用和库函数的区别. 自己把这篇的所有代码用vim的敲完了,主要前期是熟悉unix的基本命令编程,大致了解

第十天:shell编程基础与编写Makefile

一:shell编程基础 shell定义:shell是一个作为用户与linux系统间接口的程序.它允许用户向操作系统输入需要执行的命令.shell有很多中,linux系统中shell为bash. shell编程可以看作是一堆命令的集合.和windows中的bat程序类似的脚本程序.为解释性语言. 第一个shell程序是判断两个数字的大小. 1 #!/bin/bash 2 3 num1=10 4 num2=9 5 6 if test $num1 -gt $num2 7 then 8 echo $nu

Bash编程基础知识学习第一节

Bash编程基础知识学习 一.bash的由来 1 .什么是Bash 什么是Shell Bash 是GNU Bourne-Again SHell,是目前大多数Linux发行版采用的Shell. Shell 是*nix提供给用户使用的界面.一个操作系统的底层是独立运行的, 用户界面和底层分开,可以最大限度的保证系统稳定.Shell就是一个特殊的程序,负责接受用户的命令,并把系统的响应返回给用户. Bash Shell 一般不需要自己安装,在安装发行版的同时都会安装好. Shell的存在是和登陆相关的

Linux Shell编程基础---国际象棋棋盘

这两天在学习一些shell编程的知识,在做到一道国际象棋的题目时,觉得有些意思,就将它写成博客. 先来看看国际象棋棋盘长啥样: 仔细想了会棋盘的分布规则,这个问题肯定有很多思路,我自己想到的是规则是1.将棋盘行数作为一个大循环,循环8次,每次循环根据行号的奇偶来确定格子颜色的次序:2.在单个行中,循环8次并判断列的奇偶数来确定打印颜色以上思路能够打印出最简单的棋盘,但是shell中一个空格的显示形状并非正方形,而且是空格的高度大于宽度.因此需要在单个棋盘的行的打印循环外在加一层控制打印空格行数的

什么是Shell?Shell脚本基础知识详细介绍

这篇文章主要介绍了什么是Shell?Shell脚本基础知识介绍,本文是一篇Shell脚本入门文章,在本文你可学到什么是Shell.有多少种Shell.一个Shell脚本代码实例,需要的朋友可以参考下 Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支. 它虽然不是Linux系统核心

多线程编程基础知识

多线程编程基础知识 http://www.cnblogs.com/cy163/archive/2006/11/02/547428.html 当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义.现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的.因此掌握