shell学习笔记(一)
2016-05-06 09:43
337 查看
【Shell什么?】
Shell是一个负责把用户语法的语言解释成系统与内核调用的解释程序——命令解释器
即使用户交互的界面也是控制系统的脚本语言
【Shell分为两大类 】
Algol 语言风格: sh,ksh,bash
C语言风格: csh,tcsh
echo $SHELL 查看shell类型
echo $SHLVL 查看嵌套层数
【每个终端的shell与用户启动的shell】
1、用户登录与shell的关系
a、服务器启动login
b、用户输入帐号与口令、
c、服务器打开/etc/passwd /etc/shadow
/etc/group /projects等文件
d、检验用户信息,并且打开的信息保存在内存中这些信息用公用的名字:
环境变量LOGNAME USERHOMESHELLUIDMALL
e、切换到主目录${HOME}
f、启动shell(loginshell /
登录shell /注册shell)
2、shell的启动方式
a、登录方式启动:登录时候默认启动方式是登录shell,
用户也可以使用登录方式启动,bash –login或bash –l
b、用户方式启动:bash
启动方式的不同:shell启动的时候还做了如下工作,加载如下几个脚本/etc/profile, ~/.bashrc(~/.bash_profile或者~/.bash_login或者~/.profile)三个文件的其中一个.
登录shell全部加载
非登入shell不全部加载~/.bashrc
【第一个shell脚本】
1、shell编程的方式
a、交互式shell编程:
命令行shell语句
b、非交互式shell编程:执行的语句存放到一个文件中——shell脚本:建议扩展名为.sh
2、shell脚本语言(algol语法)
字work:
字面值(word)、标示字(name)、保留字、使用空格和tab键分割
语句statement:
使用;或回车键等分割
块block:
多种(流程控制块、函数块)
3、使用语句的多种形式
;
分隔的语句
||
分割语句:一个成功就终止
&&
分割语句:一个失败终止
|
分隔语句:管道
&
必须加载语句
<newline>
必须在语句最后
4、使用块 a、(语句列表)
eg:(pwd;date)
b、{语句列表;} eg:{ pwd;date;}
5、元字符:容易歧义字符: |
; & ()
ceec
空格 <> |
回车
【shell的执行】
1、在第一行使用#!/bin/bash指定shell程序,#!指定解释当前脚本文件的程序
2、命令行优先制定shell程序,命令行没有,则代码中优先,都没有,采用命令行默认shell程序
3、把脚本.sh设置可执行文件#chmod +x filename.sh
4、多行注释
:<<BLOCK ->注释开始 将BLOCK之间的代码重定向到一个不存在的命令中,
…… 从而间接的实现了多行注释
BLOCK ->注释结束
【变量】
1、声明与使用
变量名=值 (没有空格)变量没有数据类型
${变量名} 如果没有歧义情况{}可以省略为: $变量名
declare 变量属性 变量名称
等同 typeset -p 显示所有变量的值
-i 定义为整数,若求值失败或不是整数设置为0
-r 声明为只读变量,不允许修改或删除
-a 声明为数组
-f 显示所以自定义函数,包括名称和函数
-x 设置成环境变量
eg: #!/bin/bash
a=20
b=hello
echo ${a}${b}
echo $a$b
declare -i d=20+30
echo $d
declare -i e
e=45+55
echo $
2、变量名的作用范围与导出变量
a、作用范围(){}的差异
()执行另外建立子shell环境来执行(两个不同环境)
{}
在当前shell环境执行,同一环境中
b、shell脚本与shell脚本之间
fork调用
直接调用:建立子进程执行
exec调用
加载调用:使用shell替代当前代码
source调用
代码包含:等价于c的#include
c、全局永远不要指望访问局部,局部可以访问全局,bash需要做额外处理
e、函数内部定义的变量也属于全局变量
f、局部变量定义local eg:local v2=200
函数定义了两个相同变量名的全局变量和局部变量,函数内部优先使用局部变量
3、特殊的变量
PATH:执行程序的搜索路径
PS1:1级命令提示符
PS2:2级命令提示符
提示符号支持特殊的转义符号
使用man bash帮助找到PS支持的所有转义符并且在~/.bash_profile设置自己喜欢的提示符
4、命令行变量
$0 命令本身
$1…$9 命令行参数
$* $@ 所有命令行参数
$# 命令行参数个数
$? 状态码0-255,用来获取shell命令的执行状态,如果成功执行,返回值0,失败则返回1
$$ 当前shell进程ID
5、销毁变量 unset eg:unset v
【赋值】
1、简单赋值 a=20
2、值的歧义的解决 var=123
" " :保持语法意义 a="hellowo${var}rld"输出hello wo123rld
' ' :保持原字符意义 a='hellowo${var}rld'输出hello wo${var}rld
$' ' :支持转义字符 a=$'hell\to\two${var}rld'输出hell o wo${var}rld
接下内容在 SHELL 笔记续篇中
Shell是一个负责把用户语法的语言解释成系统与内核调用的解释程序——命令解释器
即使用户交互的界面也是控制系统的脚本语言
【Shell分为两大类 】
Algol 语言风格: sh,ksh,bash
C语言风格: csh,tcsh
echo $SHELL 查看shell类型
echo $SHLVL 查看嵌套层数
【每个终端的shell与用户启动的shell】
1、用户登录与shell的关系
a、服务器启动login
b、用户输入帐号与口令、
c、服务器打开/etc/passwd /etc/shadow
/etc/group /projects等文件
d、检验用户信息,并且打开的信息保存在内存中这些信息用公用的名字:
环境变量LOGNAME USERHOMESHELLUIDMALL
e、切换到主目录${HOME}
f、启动shell(loginshell /
登录shell /注册shell)
2、shell的启动方式
a、登录方式启动:登录时候默认启动方式是登录shell,
用户也可以使用登录方式启动,bash –login或bash –l
b、用户方式启动:bash
启动方式的不同:shell启动的时候还做了如下工作,加载如下几个脚本/etc/profile, ~/.bashrc(~/.bash_profile或者~/.bash_login或者~/.profile)三个文件的其中一个.
登录shell全部加载
非登入shell不全部加载~/.bashrc
【第一个shell脚本】
1、shell编程的方式
a、交互式shell编程:
命令行shell语句
b、非交互式shell编程:执行的语句存放到一个文件中——shell脚本:建议扩展名为.sh
2、shell脚本语言(algol语法)
字work:
字面值(word)、标示字(name)、保留字、使用空格和tab键分割
语句statement:
使用;或回车键等分割
块block:
多种(流程控制块、函数块)
3、使用语句的多种形式
;
分隔的语句
||
分割语句:一个成功就终止
&&
分割语句:一个失败终止
|
分隔语句:管道
&
必须加载语句
<newline>
必须在语句最后
4、使用块 a、(语句列表)
eg:(pwd;date)
b、{语句列表;} eg:{ pwd;date;}
5、元字符:容易歧义字符: |
; & ()
ceec
空格 <> |
回车
【shell的执行】
1、在第一行使用#!/bin/bash指定shell程序,#!指定解释当前脚本文件的程序
2、命令行优先制定shell程序,命令行没有,则代码中优先,都没有,采用命令行默认shell程序
3、把脚本.sh设置可执行文件#chmod +x filename.sh
4、多行注释
:<<BLOCK ->注释开始 将BLOCK之间的代码重定向到一个不存在的命令中,
…… 从而间接的实现了多行注释
BLOCK ->注释结束
【变量】
1、声明与使用
变量名=值 (没有空格)变量没有数据类型
${变量名} 如果没有歧义情况{}可以省略为: $变量名
declare 变量属性 变量名称
等同 typeset -p 显示所有变量的值
-i 定义为整数,若求值失败或不是整数设置为0
-r 声明为只读变量,不允许修改或删除
-a 声明为数组
-f 显示所以自定义函数,包括名称和函数
-x 设置成环境变量
eg: #!/bin/bash
a=20
b=hello
echo ${a}${b}
echo $a$b
declare -i d=20+30
echo $d
declare -i e
e=45+55
echo $
2、变量名的作用范围与导出变量
a、作用范围(){}的差异
()执行另外建立子shell环境来执行(两个不同环境)
{}
在当前shell环境执行,同一环境中
b、shell脚本与shell脚本之间
fork调用
直接调用:建立子进程执行
exec调用
加载调用:使用shell替代当前代码
source调用
代码包含:等价于c的#include
c、全局永远不要指望访问局部,局部可以访问全局,bash需要做额外处理
e、函数内部定义的变量也属于全局变量
f、局部变量定义local eg:local v2=200
函数定义了两个相同变量名的全局变量和局部变量,函数内部优先使用局部变量
3、特殊的变量
PATH:执行程序的搜索路径
PS1:1级命令提示符
PS2:2级命令提示符
提示符号支持特殊的转义符号
使用man bash帮助找到PS支持的所有转义符并且在~/.bash_profile设置自己喜欢的提示符
4、命令行变量
$0 命令本身
$1…$9 命令行参数
$* $@ 所有命令行参数
$# 命令行参数个数
$? 状态码0-255,用来获取shell命令的执行状态,如果成功执行,返回值0,失败则返回1
$$ 当前shell进程ID
5、销毁变量 unset eg:unset v
【赋值】
1、简单赋值 a=20
2、值的歧义的解决 var=123
" " :保持语法意义 a="hellowo${var}rld"输出hello wo123rld
' ' :保持原字符意义 a='hellowo${var}rld'输出hello wo${var}rld
$' ' :支持转义字符 a=$'hell\to\two${var}rld'输出hell o wo${var}rld
接下内容在 SHELL 笔记续篇中
相关文章推荐
- PowerShell 替换 Office365 用户主邮件地址
- 实用shell收藏
- linux下查看文件夹及其排序的bash语法
- Shell中的while循环【转】
- LinuxShell_variable+if+while
- Win10系统开启Linux Bash命令行
- shell脚本自动化部署-如何向expect脚本里面传递参数
- 解决shell命令行只显示-bash-4.1#不显示用户和路径方法
- Shell中awk和sed的一些使用
- linux shell 数字计算详解
- 用PowerShell在China Azure创建ARM虚拟机
- shell 中的各种括号
- shell排序
- bash
- Linux中profile、bashrc、bash_profile之间的区别和联系
- Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
- linux shell 快捷键.
- shell 基础
- Mac 实用工具bash-comletion介绍安装
- 使用Xshell工具远程Linux环境部署web项目