shell的详细介绍和编程(上)

  • shell介绍

shell是一个编程语言解释器,这个解释器解释从键盘输入的命令,也解释存储在脚本中的命令序列,shell脚本是一个包含一系列命令的文件,运行一个脚本就是运行这个文件中的每个命令。可以用一个shell脚本在一次请求中来执行多个命令。shell脚本的执行:shell解释程序会fork+exec执行这个脚本命令,在exec调用中,内核会检查脚本的第一行(如:#!/bin/bash)找到来执行脚本的解释程序,然后装入这个解释程序,由它来解释执行脚本

  • shell的执行

可以直接chmod +x shell.sh  加入执行命令 ./shell.sh 运行 ,也可以直接bash shell.sh 执行 bash -x 可以看到执行的详细,bash -n shell.sh 可以检查语法错误,拼写错误不会提示。

  • shell的变量

shell的变量有:可变化的量,命名内存空间

bash环境变量有如下:

本地变量:当前shell进程;

环境变量:当前shell进程及其子进程;

局部变量:某个函数执行过程;

位置参数变量:在脚本中引用传递给脚本的参数;在函数中引用传递给函数的参数;

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

本地变量定义:

name=value  //  name: 变量名   =:赋值符号  =:赋值符号 value:值

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

引用变量:${name}, $name  // 本地变量定义与使用,只对当前shell生效,注销重新登录就失效,在子进程时之前定义的shell也会失效

脚本里面引用:弱引用: "", 其内部的变量引用会被替换为变量值;强引用:‘‘,其变量的变量引用会保持原有字符;命令引用:`COMMAND`, $(COMMAND),引用命令的执行结果;

声明为整型:declare -i name[=value]  或者  let name=value

变量的失效或者取消:脚本执行完成自动销毁:shell进程终止;手动销毁:unset name

[[email protected] bin]# tao="shaonian.blog.51cto.com"
[[email protected] bin]# echo $tao   // 声明变量tao
shaonian.blog.51cto.com
[[email protected] bin]# bash 
[[email protected] bin]# echo $tao   //子进程失效
[[email protected] bin]# set   //查看变量
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath

环境变量定义:

有点像被“导出”的本地变量

export name[=value]

declare -x name[=value]

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

局部变量:某个shell脚本执行过程;只在shell脚本执行过程中生效,之后再调用失效。

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

时间: 2024-10-20 16:31:53

shell的详细介绍和编程(上)的相关文章

shell的详细介绍和编程(中)

Shell 循环语句.条件判断的使用方法及其相关示例 bash脚本条件判断语句使用: test语句的使用说明 if判断语句的使用 case判断语句的应用 条件测试:test 说明介绍:shell中的test命令用于检查某个条件是否成立,它可以进行数值.字符和文件三个方面的测试. test的使用语法 : test EXPRESSION 或者  [ EXPRESSION ]:[[ EXPRESSION ]] 整数测试:隐含着做数值大小比较,所以不要给变量引用加引用: $A -gt $B:是否大于:是

shell的详细介绍和编程(下)

bash脚本编程: 变量:变量名 数组:连续的多个独立内存空间:每个内存空间相当于一个变量: 元素:数组名[索引] bash 4.0+ 传统数组:索引为数字,从0开始编号: declare -a ARRAY_NAME 关联数组:索引可以自定义,可以使用任意字符串做索引: declare -A ARRAY_NAME 支持稀疏格式 数组元素的赋值方式: (1) 一次只赋值一个元素 array[index]=value (2) 一次赋值全部元素 array=("val1" "val

较详细介绍IBM AIX操作系统上常用的korn shell的基础知识

[导读]较详细介绍IBM AIX操作系统上常用的korn shell的基础知识. Korn Shell执行命令的顺序1.关键字,如if,for,function等2.别名(Aliases)3.内部命令,如cd, whence和函数等4.函数Functions5.脚本Scripts.在PATH中的可执行程序※找到命令的根源用下面的命令:whence -v command或:type commandAlias(别名)alias aliasname=command取消一个别名:unalias alia

Linux shell脚本基础学习详细介绍(完整版)一

Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Linux 脚本编写基础◆1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序. 当编辑好脚本时,如果要执行该脚本,还必须使其可执行. 要使脚本可执

Linux shell脚本基础学习详细介绍(完整版)二

详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续. Linux shell脚本基础已经被分成好几个部分了,这里对控制流程的内容也就马上讲完了,这是最后一部分关于here document,这里举例稍微有点复杂,我们慢慢来分析这个复杂Linux shell脚本. 6. Here documents 当要将几行文字传递给一个命令时,here docu

【转】JSP内置对象详细介绍(上)

第一个问题: JSP有多少类内置对象? 要想回答好这个问题,首先是对JSP的基本知识和技术有深刻的理解和掌握.主要有九个 内置对象:application对象,config对象,exception对象,out对象,page对象,pageContext对象,request对象,reponse对象,session对象. 第二个问题:JSP的内置对象都是什么类型的?这些对象的作用是什么?它们常用的方法是什么呢? (1)application对象:javax.servlet.ServletContext

JSP内置对象详细介绍(上)<转载>

第一个问题: JSP有多少类内置对象? 要想回答好这个问题,首先是对JSP的基本知识和技术有深刻的理解和掌握.主要有九个 内置对象:application对象,config对象,exception对象,out对象,page对象,pageContext对象,request对象,reponse对象,session对象. 第二个问题:JSP的内置对象都是什么类型的?这些对象的作用是什么?它们常用的方法是什么呢? (1)application对象:javax.servlet.ServletContext

Ubuntu根目录下各文件夹的功能详细介绍

Ubuntu的根目录下存在着很多的文件夹,但你知道他们都存放着哪些文件呢?这些是深入了解Ubuntu系统必不缺少的知识,本文就关于此做一下介绍吧. /bin/    用以存储二进制可执行命令文件. /sbin/    许多系统命令的存储位置,/usr/sbin/中也包括了许多命令. /root/    超级用户,即根用户的主目录. /home/    普通用户的默认目录,在该目录下,每个用户拥有一个以用户名命名的文件夹. /boot/    存放Ubuntu内核和系统启动文件. /boot/gr

python编写shell脚本详细讲解

今天需要编写一个shell脚本实现App自动生成的功能,需要处理HTTP REST请求,解析JSON,处理文件,执行命令等,本来想用shell搞定,但感觉比较麻烦,还是用python吧,虽然以前用Python都是在树莓派上玩的,多尝试一种方法总是好的. 虽然我受linux的影响甚深,但是对于*nix 里随处可见的sh脚本却是讨厌之极.为什么讨厌呢?首先是因为sh脚本那莫名其妙的语法,感觉就像随写随扔的程序,完全没有任何美感可言.其次是sh脚本的处理能力还是比较弱的,在文本处理.XML处理还有网络