shell函数

Linux 系统结构详解

拟墨画扇 提交于 2019-11-30 01:56:00
Linux系统一般有4个主要部分: 内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。 1、linux内核 内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。 Linux 内核由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络管理等。如图: 系统调用接口:SCI 层提供了某些机制执行从用户空间到内核的函数调用。这个接口依赖于体系结构,甚至在相同的处理器家族内也是如此。SCI 实际上是一个非常有用的函数调用多路复用和多路分解服务。在 ./linux/kernel 中您可以找到 SCI 的实现,并在 ./linux/arch 中找到依赖于体系结构的部分。 2、内存管理 对任何一台计算机而言,其内存以及其它资源都是有限的。为了让有限的物理内存满足应用程序对内存的大需求量,Linux 采用了称为“虚拟内存”的内存管理方式。Linux 将内存划分为容易处理的“内存页”(对于大部分体系结构来说都是 4KB)。Linux 包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。 不过内存管理要管理的可不止 4KB 缓冲区。Linux 提供了对 4KB 缓冲区的抽象,例如 slab 分配器。这种内存管理模式使用

shell编程之函数定义及使用

我的未来我决定 提交于 2019-11-29 22:33:44
一.函数定义 #!/bin/sh #func1.sh hello() ##函数定义 {   echo "Hello there today's date is 'date +%Y-%m-%d' "   #return 2 ###返回值其实是状态码,只能在[0-255]范围内 } echo "now going to the function hello" hello #echo $? 获取函数的return值 echo "back from the function" 函数调用:function hello() 或 function hello 或 hello 注意:1.必须在调用函数地方之前,先声明函数,shell脚本是逐行运行,不会像其它语言一样先预 编译    2.函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后 一条命令运行结果,作为返回值。return后跟数值n(0-255) 脚本高度:sh-vx helloWorld.sh或者在脚本中增加set -x 二.函数参数 #!/bin/bash #fun1.sh funWithParam(){   echo "第一个参数为 $1!"   echo "第二个参数为 $2!"   echo "第十个参数为 $10!"   echo "第十个参数为 ${10}!"   echo "第十一个参数为

linux 学习笔记四

不羁岁月 提交于 2019-11-29 21:29:23
linux 学习笔记四 shell 执行过程 bash 类型 Login Bash Interactive Bash shell 执行 • 父 shell Fork 一 sub-shell • Sub-shell继承父shell环境 • Sub-shell调用指定的解释器解释执行该脚本 • Sub-shell退出,相关环境被销毁 • 父 shell 取得 sub-shell 的退出状态 shell 解析 1 、 brace expansion (花括号扩展) 2 、 tilde expansion (波浪线扩展) 3 、 parameter, variable expansion (变量扩展) 4 、 arithmetic expansion (算术扩展) 5 、 command substitution (命令替换) 6 、 word splitting (词的拆分) 7 、 pathname expansion (路径名扩展) Bash 语法 变量 • 变量赋值: name=value • 变量引用: ${name} 合法的变量名: 字母、下划线、数字 注意: – = 号两边不允许空格 – $name 是 ${name} 的简写 常用变量 数值计算 / % ( 加 , 减 , 乘 , 除 , 取模 ) i=10; j=20; (( i++ )) (( cnt=i+j)) cnt

shell脚本举例

会有一股神秘感。 提交于 2019-11-29 20:42:43
一、Shell编程实战收集服务器信息 在企业上产环境中,经常会对服务器资产进行统计存档,单台服务器可以手动去统计服务器的CPU型号、内存大小、硬盘容量、网卡流量等,如果服务器数量超过百台、千台,使用手工方式就变得非常吃力。 基于Shell脚本实现自动化服务器硬件信息的收集,并将收集的内容存放在数据库,能更快、更高效的实现对服务器资产信息的管理。Shell脚本实现服务器信息自动收集,编写思路如下: 创建数据库和表存储服务器信息; 基于Shell四剑客awk、find、sed、grep获取服务器信息; q 将获取的信息写成SQL语句; q 定期对SQL数据进行备份; q 将脚本加入Crontab实现自动备份; 创建数据库表,创建SQL语句如下: CREATE TABLE `audit_system` ( `id` int(11) NOT NULL AUTO_INCREMENT, `ip_info` varchar(50) NOT NULL, `serv_info` varchar(50) NOT NULL, `cpu_info` varchar(50) NOT NULL, `disk_info` varchar(50) NOT NULL, `mem_info` varchar(50) NOT NULL, `load_info` varchar(50) NOT NULL, `mark

shell脚本面试题

纵然是瞬间 提交于 2019-11-29 15:01:08
Q:1 Shell脚本是什么、它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成这些日常工作任务。 Q:2 什么是默认登录shell,如何改变指定用户的登录shell 答:在Linux操作系统,“/bin/bash”是默认登录shell,是在创建用户时分配的。使用chsh命令可以改变默认的shell。示例如下所示: ? 1 2 # chsh <username> -s <new_default_shell> # chsh linuxtechi -s /bin/sh Q:3 可以在shell脚本中使用哪些类型的变量? 答:在shell脚本,我们可以使用两种类型的变量: 系统定义变量 用户定义变量 系统变量是由系统系统自己创建的。这些变量通常由大写字母组成,可以通过“ set ”命令查看。 用户变量由系统用户来生成和定义,变量的值可以通过命令“ echo $<变量名> ”查看。 Q:4 如何将标准输出和错误输出同时重定向到同一位置? 答:这里有两个方法来实现: 方法一: 2>&1 (# ls /usr/share/doc > out.txt 2>&1 ) 方法二: &> (# ls /usr/share/doc &> out.txt ) Q:5

Linux下shell脚本启动jar包

怎甘沉沦 提交于 2019-11-29 12:37:30
Linux下shell脚本启动jar包 不说废话,直接上图。 这是整个目录结构。直接看脚本。 上面是完整的脚本代码,原理不多说,百度Google都可以。需要注意的地方是以下几点: 第4行的MAIN_CLASS="ls.gatetest.PressureTest"是你的启动函数所在的类(main函数) 第6行中的" CLASSPATH=.:./config ",这个是将你的配置文件路径告诉CLASSPATH,当然你可以随意修改后面的目录,这里默认放到了config下面;gatetest.jar是运行的主jar,当然可以在第7~9行做; 第7~9的for循环是依次加载并拼接jar包到 CLASSPATH 中,不建议修改; 第23行的start和第33行的stop是启动函数,看后面的启动命令就知道了; 启动命令:sh start.sh start; 停止命令: sh start.sh start; 重启命令: sh start.sh restart; 可以根据需要,自行向main传参,比如需要传递3个参数时,可以修改脚本如下: 来源: CSDN 作者: 梵寞三缘 链接: https://blog.csdn.net/qq_19585711/article/details/50184641

Linux 脚本编写基础

蹲街弑〆低调 提交于 2019-11-29 12:23:51
1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh   符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。   当编辑好脚本时,如果要执行该脚本,还必须使其可执行。   要使脚本可执行: 编译 chmod +x filename 这样才能用./filename 来运行 1.1.2 注释   在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程序中使用注释。 如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用 及工作原理。 1.1.3 变量   在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量 进行声明。要赋值给一个变量,您可以这样写: #!/bin/sh #对变量赋值: a="hello world" # 现在打印变量a的内容: echo "A is:" echo $a 有时候变量名很容易与其他文字混淆,比如: num=2 echo "this is the $numnd" 这并不会打印出"this is the 2nd",而仅仅打印"this is the ",因为shell会去搜索变量numnd的值,

shell脚本函数

无人久伴 提交于 2019-11-29 12:23:01
shell函数调用 函数的所有 标准输出 都传递给了主程序的变量 value_name=` function \ _name [arg1 arg2...] 获取函数的返回值 状态 function_name[arg1 arg2...] echo $? 函数变量的作用域 全局变量 局部变量 local 来源: CSDN 作者: 三里十步 链接: https://blog.csdn.net/mikkles/article/details/78142444

SHELL脚本学习笔记

浪尽此生 提交于 2019-11-29 12:19:51
SHELL脚本学习笔记 创建可执行的 SHELL 脚本 touch shell.sh chmod +x shell.sh # 授权:可执行 内建函数 # 打印 echo # 不换行打印 echo -n 变量 # 变量命名规范:字母、数字和下划线 # 取变量值: ${variable_name} 或者 $variable_name # 获取命令结果的值:$(command_name) 或者 command_name # 定义只读变量 readonly variable_name # 删除变量(不能删除只读变量):unset variable_name # SHELL变量作用域:局部变量、全局变量、环境变 SHELL 特殊变量 变量 含义 $0 当前脚本的文件名 $n (n>=1) 传递给脚本或者函数的参数。n 表示第一个参数,${10}… $# 传递给脚本或者函数的参数个数 $* 传递给脚本或者函数的所有参数 $@ 传递给脚本或者函数的所有参数, $? 上个命令的退出状态,或者函数返回值 $$ 当前SHELL脚本进程 ID 当它们被双引号" "包含时,就会有区别了: "$*"会将所有的参数从整体上看做一份数据,而不是把每个参数都看做一份数据。 "$@"仍然将每个参数都看作一份数据,彼此之间是独立的。 函数定义 # 函数定义 # 定义 Shell 函数时不能带参数 # function

30个经典shell脚本上

戏子无情 提交于 2019-11-29 12:05:37
注:转自https://weibo.com/linuxprobe?topnav=1&wvr=6&topsug=1&is_hot=1(刘遄老师的Linux就该这样学) 先了解下编写Shell过程中注意事项: 开头加解释器:#!/bin/bash 语法缩进,使用四个空格;多加注释说明。 命名建议规则:变量名大写、局部变量小写,函数名小写,名字体现出实际作用。 默认变量是全局的,在函数中变量local指定为局部变量,避免污染其他作用域。 有两个命令能帮助我调试脚本:set -e 遇到执行非0时退出脚本,set-x 打印执行过程。 写脚本一定先测试再到生产上。 1、获取随机字符串或数字 获取随机8位字符串: 方法1: # echo $RANDOM |md5sum |cut -c 1-8 471b94f2 方法2: # openssl rand -base64 4 vg3BEg== 方法3: # cat /proc/sys/kernel/random/uuid |cut -c 1-8 ed9e032c 获取随机8位数字: 方法1: # echo $RANDOM |cksum |cut -c 1-8 23648321 方法2: # openssl rand -base64 4 |cksum |cut -c 1-8 38571131 方法3: # date +%N |cut -c 1-8