shell函数

UNIX基础知识

ⅰ亾dé卋堺 提交于 2020-01-08 00:37:10
1 UNIX基础知识 1.1 UNIX体系结构 操作系统可定义为一种软件,它控制计算机硬件资源,提供程序运行环境,通常将这种软件称为内核(kernel)。UNIX操作系统的体系结构如下图所示,其中内核的接口被称为系统调用(system call图中阴影部分),公共函数库构建在系统调用接口之上,应用程序可调用公共函数库,也可以直接使用系统调用。shell是一种特殊的应用程序,为运行其他应用程序提供一个接口。 1.2 登录 (1) 登录名 用户在登录UNIX时,先键入登录名,然后键入口令。系统在其口令接口(Redhat 2.6.32-431.el6.x86_64在/etc/passwd下)中查看登录名。如下: 口令文件中的登录项是由7个以冒号分隔的字段组成,依次是:登录名、加密口令、数字用户ID、数字组ID、字段注释、起始目录以及shell程序。 (2)shell 用户登录后,系统通常先显示一些系统信息,然后用户可通过shell程序键入命令。shell是一个命令行解释器,可读取用户输入,然后执行命令。shell的用户输入通常来自于终端(交互式shell),有时则来自于文件(称为shell脚本)。UNIX系统中shell有多种,用得比较多的是Bash shell。 1.3 文件和目录 (1)文件系统 UNIX文件系统是目录和文件的一种层次结构,所有东西的起点是称为根(root)目录

Shell 参数扩展及各类括号在 Shell 编程中的应用

本秂侑毒 提交于 2020-01-07 09:30:17
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 今天看有人总结了 shell 下的参数扩展,但不是很全,恰好以前整理过放在百度空间,但百度空间目前半死不活的情况下对 Google 非常不友好,索性一并转过来方便查阅。 1、bash 中的 大括号参数扩展 (Parameter Expansion) 假设我们定义了一个变量为: file=/dir1/dir2/dir3/my.file.txt 1.1 bash 下的 split 取“数组”的首、尾: ${file#*/}:拿掉第一条 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt ${file##*/}:拿掉最后一条 / 及其左边的字符串:my.file.txt ${file#*.}:拿掉第一个 . 及其左边的字符串:file.txt ${file##*.}:拿掉最后一个 . 及其左边的字符串:txt ${file%/*}:拿掉最后条 / 及其右边的字符串:/dir1/dir2/dir3 ${file%%/*}:拿掉第一条 / 及其右边的字符串:(空值) ${file%.*}:拿掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file ${file%%.*}:拿掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my Tips: 记忆的方法为: #

Shell脚本入门-2

半腔热情 提交于 2020-01-07 08:38:36
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> (一)定义变量时,变量名不加美元符号($,PHP语言中变量需要) ,如: your_name="runoob.com" 注意, 变量名和等号之间不能有空格 ,这可能和你熟悉的所有编程语言都不一样。同时, 变量名的命名须遵循如下规则: 命名只能使用英文字母,数字和下划线, 首个字符不能以数字开头 。 中间不能有空格 ,可以使用下划线(_)。 不能使用标点符号。 不能使用bash里的关键字 (可用help命令查看保留关键字)。 有效的 Shell 变量名示例如下: RUNOOB LD_LIBRARY_PATH _var var2 无效的变量命名: ?var=123 user*name=runoob 除了 显式地直接赋值,还可以用语句给变量赋值 ,如: for file in `ls /etc` 以上语句将 /etc 下目录的文件名循环出来 。 (二)使用变量 使用一个定义过的变量,只要在变量名前面加美元符号即可,如: your_name="qinjx" echo $your_name echo ${your_name} 变量名外面的花括号是可选的,加不加都行,加花括号是为了 帮助解释器识别变量的边界 ,比如下面这种情况: for skill in Ada Coffe Action Java; do echo "I

sh和bash之间的区别

那年仲夏 提交于 2020-01-07 00:51:16
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在编写shell程序时,我们经常使用 /bin/sh 和 /bin/bash 。 我通常使用 bash ,但是我不知道它们之间有什么区别。 bash 和 sh 之间的主要区别是什么? 在使用 bash 和 sh 编程时,我们需要注意什么? #1楼 Shell 是用户和OS之间的接口,用于访问操作系统的服务。 它可以是GUI或CLI(命令行界面)。 sh (Bourne sh ell)是一个Shell命令行解释器,用于类似Unix / Unix的操作系统。 它提供了一些内置命令。 在脚本语言中,我们将解释器表示为 #!/bin/sh 。 它是bash(自由/开放),kash(非自由)之类的其他shell支持最广泛的一种。 击 (B ourne 增益 的 地狱)是一个外壳更换对于Bourne壳。 Bash是sh的超集。 Bash支持sh。 POSIX是一组定义POSIX兼容系统应如何工作的标准。 Bash实际上不是POSIX兼容的外壳。 在脚本语言中,我们将解释器表示为 #!/bin/bash 。 比喻: Shell就像一个接口或规范或API。 sh是实现Shell接口的类。 Bash是sh的子类。 #2楼 /bin/sh 可能会也可能不会调用与 /bin/bash 相同的程序。 sh 至少 支持 POSIX所需

Linux Bash Shell编程快速入门

空扰寡人 提交于 2020-01-05 12:04:50
BASH 的基本语法 最简单的例子 —— Hello World! 关于输入、输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1 最简单的例子 —— Hello World! 几乎所有的讲解编程的书给读者的第一个例子都是 Hello World 程序,那么我们今天也就从这个例子出发,来逐步了解 BASH。 用 vi 编辑器编辑一个 hello 文件如下: #!/bin/bash # This is a very simple example echo Hello World 这样最简单的一个 BASH 程序就编写完了。这里有几个问题需要说明一下: 一,第一行的 #! 是什么意思 二,第一行的 /bin/bash 又是什么意思 三,第二行是注释吗 四,echo 语句 五,如何执行该程序 #! 是说明 hello 这个文件的类型的,有点类似于 Windows 系统下用不同文件后缀来表示不同文件类型的意思(但不相同)。Linux 系统根据 “#!” 及该字串后面的信息确定该文件的类型,关于这一问题同学们回去以后可以通过 “man magic”命令 及 /usr/share/magic 文件来了解这方面的更多内容。在 BASH 中 第一行的 “#!” 及后面的 “/bin/bash” 就表明该文件是一个 BASH 程序,需要由

计算机系统大作业

孤者浪人 提交于 2020-01-04 14:03:39
#计算机系统大作业 题 目 程序人生-Hello’s P2P 专 业 软件工程 学   号 1183710227 班   级 1837102 学 生 孙兴博 指 导 教 师 史先俊 计算机科学与技术学院 2019年12月 摘 要 摘要是论文内容的高度概括,应具有独立性和自含性,即不阅读论文的全文,就能获得必要的信息。摘要应包括本论文的目的、主要内容、方法、成果及其理论与实际意义。摘要中不宜使用公式、结构式、图表和非公知公用的符号与术语,不标注引用文献编号,同时避免将摘要写成目录式的内容介绍。 论文内容主要是在预处理,编译,汇编,链接,进程管理,存储管理,和io管理等方面,对hello例程进行全面的系统级解释。 文章首先对源文件hello.c文件变为hello可执行文件的中的过程,以及产生的中间文件,来描述关于预处理,编译,汇编和链接的内容。再利用hello可执行文件执行过程中进程切换,内存分配情况和输入输出情况对有关于进程管理,存储时地址的管理,地址的映射和转换,Linux下的io管理方法接口等进行描述。 本文通过hello.c例程,对程序从源代码到可执行文件,再到被载入内存执行的过程,使用计算机系统的相关知识概念,进行解释。 关键词:计算机系统、编译,汇编,链接,进程,内存,shell,信号,cache; (摘要0分,缺失-1分,根据内容精彩称都酌情加分0-1分) 目 录 第1章

shell实现随机数多种方法(data,random,uuid)

自闭症网瘾萝莉.ら 提交于 2020-01-03 09:24:54
在日常生活中,随机数实际上经常遇到,想丢骰子,抓阄,还有抽签。呵呵,非常简单就可以实现。那么在做程序设计,真的要通过自己程序设计出随机数那还真的 不简单了。现在很多都是操作系统内核会提供相应的api,这些原始参数是获取一些计算机运行原始信息,如内存,电压,物理信号等等,它的值在一个时间段可 以保证是唯一的了。好了,废话我就不说了。呵呵。 shell脚本程序我们有那些获得随机数方法呢? 一、通过时间获得随机数(date) 这个也是我们经常用到的,可以说时间是唯一的,也不会重复的,从这个里面获得同一时间的唯一值。适应所有程序里面了。 例子: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 [chengmo@centos5 shell]$ date +%s 1287764773 #获得时间戳,当前到:1970-01-01 00:00:00 相隔的秒数 #如果用它做随机数,相同一秒的数据是一样的。在做循环处理,多线程里面基本不能满足要求了。 [chengmo@centos5 shell]$ date +%N 738710457 #获得当前时间的纳秒数据,精确到亿分之一秒。 #这个相当精确了,就算在多cpu,大量循环里面,同一秒里面,也很难出现相同结果,不过不同时间里面还会有大量重复碰撞 [chengmo@centos5 shell]$ date +%s%N

Linux-shell-算术运算{expr、bc、dc、(( ))和[ ]}

蓝咒 提交于 2020-01-02 00:45:27
转:http://www.cnblogs.com/snowsolf/p/3325235.html 在Linux下做算术运算时你是如何进行的呢?是不是还在用expr呢?你会说我还会bc还有其它的呢! 闲话不多扯,干正事! expr expr在使用中要注意一些书写,如表达式中量和运算符号之间的空格及一些运算符号需要转义,还有一点需要记住,expr只适用于整数之间的运算! 表达式 expr的help文档中关于表达式部分如下: ARG1 | ARG2 若ARG1 的值不为0 或者为空,则返回ARG1,否则返回ARG2 ARG1 & ARG2 若两边的值都不为0 或为空,则返回ARG1,否则返回 0 ARG1 < ARG2 ARG1 小于ARG2 ARG1 <= ARG2 ARG1 小于或等于ARG2 ARG1 = ARG2 ARG1 等于ARG2 ARG1 != ARG2 ARG1 不等于ARG2 ARG1 >= ARG2 ARG1 大于或等于ARG2 ARG1 > ARG2 ARG1 大于ARG2 ARG1 + ARG2 计算 ARG1 与ARG2 相加之和 ARG1 - ARG2 计算 ARG1 与ARG2 相减之差 ARG1 * ARG2 计算 ARG1 与ARG2 相乘之积 ARG1 / ARG2 计算 ARG1 与ARG2 相除之商 ARG1 % ARG2 计算 ARG1

Linux架构

我的梦境 提交于 2019-12-30 05:27:07
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! 我以下图为基础,说明Linux的架构(architecture)。(该图参考《 Advanced Programming in Unix Environment 》) 最内层是硬件,最外层是用户常用的应用,比如说firefox浏览器,evolution查看邮件,一个计算流体模型等等。 硬件 是物质基础,而 应用 提供服务。但在两者之间,还要经过一番周折。 还记得 Linux启动 。Linux首先启动 内核 (kernel),内核是一段计算机程序,这个程序直接管理管理硬件,包括CPU、内存空间、硬盘接口、网络接口等等。所有的计算机操作都要通过内核传递给硬件。 为了方便调用内核,Linux将内核的功能接口制作成 系统调用 (system call)。系统调用看起来就像C语言的函数。你可以在程序中直接调用。Linux系统有两百多个这样的系统调用。用户不需要了解内核的复杂结构,就可以使用内核。系统调用是操作系统的最小功能单位。一个操作系统,以及基于操作系统的应用,都不可能实现超越系统调用的功能。一个系统调用函数就像是汉字的一个 笔画 。任何一个汉字都要由基本的笔画(点、横、撇等等)构成。我不能臆造笔画。 在命令行中输入 $man 2 syscalls 可以查看所有的系统调用

SHELL编程基础(二)

别来无恙 提交于 2019-12-29 22:35:00
SHELL编程基础(二) 编写一个简单的程序 #this is sample //注释 echo "hello,welcome to Fedora 6" echo "Logged in $USER." env|grep PATH echo $PATH 1 、变量 1 )用户变量 VAL=val 如 St?nt=tom echo St?nt echo $St?nt 变量引用符“$” 注意:单引号和反斜杆都可以阻止使用变量的值。双引号不会阻止变量替换,但是可以关闭大多数其他字符的特殊意义。 当使用变量作为一个参数执行一个命令时,shell将用该变量的值来代替变量名,如果变量的值包含特殊字符,如*,?,等,还会进行变量扩展。如果用””引号括起来,可以阻止bash对展开的变量进行路径名扩展。 删除变量用unset $St?nt. 2 )变量属性 a 、只读, readonly b 、 declare,typest -a 数组变量 -f 函数名变量 -i 整形变量 -r 只读 -x 输出变量 默认情况下,变量的值作为字符串存放。 3 )全局(环境)变量 全局变量全部用大写字母。 系统变量可以通过继承声明并初始化,也可以在shell启动时声明并初始化。可以通过命令行方式或者在初始化文件中为这些变量指定值。对于那些不由shell自动输出的变量,用户必须使用export