shell入门笔记1:执行方式、运行方式、变量、替换
说明:
本文是关于http://c.biancheng.net/cpp/shell/的相关笔记
shell的两种执行方式
| 交互式(interactive) | 解释执行用户的命令,用户输入一条命令,Shell就解释执行一条。 |
|
批处理 (batch) |
用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。 |
运行shell脚本的两种方法
| 作为可执行程序 | ./test.sh |
| 作为解释器参数 | /bin/bash test.sh |
注意:
1.作为可执行程序运行时
一定要写成./test.sh,而不是test.sh。
直接写test.sh,linux系统会去PATH里寻找有没有叫test.sh,
而当前目录通常不在PATH里,所以写成test.sh是会找不到命令的,
要用./test.sh告诉系统说,就在当前目录找。
第一行需写上#!/bin/bash,
“#!”(读shebang) 是一个约定好的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell。
通过这种方式运行bash脚本,第一行一定要写对,好让系统查找到正确的解释器。
2.作为解释器参数运行时
这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。
shell变量
| 定义变量 | 变量名=变量值 | 变量名和等号之间不能有空格 |
| 使用变量 | ${变量名} | 加花括号是为了帮助解释器识别变量的边界 |
| 只读变量 | readonly 变量名 | 使用readonly命令可以将变量定义为只读变量,只读变量的值不能被改变 |
| 删除变量 | unset 变量名 | 变量被删除后不能再次使用,unset命令不能删除只读变量 |
特殊变量
| $n | 传递给脚本或函数的参数 | n是一个数字,表示第几个参数。例如,当前脚本的文件名是$0,第一个参数是$1,第二个参数是$2。 |
| $# | 传递给脚本或函数的参数个数 | |
| $* | 传递给脚本或函数的所有参数 | 被双引号(" ")包含时,将所有参数作为一个整体。 |
| $@ | 传递给脚本或函数的所有参数 | 被双引号(" ")包含时,将所有参数分开。 |
| $? | 上个命令的退出状态,或函数的返回值 | |
| $$ | 当前Shell进程ID |
#命令行参数:
#运行脚本时传递给脚本的参数称为命令行参数。
#命令行参数用$n表示,例如,$1表示第一个参数,$2表示第二个参数,依次类推。
#$0表示当前脚本的文件名。
#!/bin/bash
echo "File Name: $0"
echo "First Parameter: $1"
echo "Second Parameter: $2"
echo "Total Number of Parameters: $#"
#$*和$@的区别:都表示传递给函数或脚本的所有参数。
#不被双引号(" ")包含时,都以"$1""$2"…"$n"的形式输出所有参数。
#被双引号(" ")包含时,
#"$*"会将所有的参数作为一个整体,以"$1$2…$n"的形式输出所有参数;
#"$@"会将各个参数分开,以"$1""$2"…"$n"的形式输出所有参数。
echo "Quoted Values: "
echo "\$*="$*
echo "\$@="$@
echo "\"\$*\"=""$*"
echo "\"\$@\"=""$@"
echo "print each param from \$*"
for var in $*
do
echo "${var}"
done
echo "print each param from \$@"
for var in $@
do
echo "${var}"
done
echo "print each param from \"\$*\""
for var in "$*"
do
echo "${var}"
done
echo "print each param from \"\$@\""
for var in "$@"
do
echo "${var}"
done
echo "print each param from \$@"
for var in $@
do
echo "${var}"
done
echo "print each param from \"\$*\""
for var in "$*"
do
echo "${var}"
done
echo "print each param from \"\$@\""
for var in "$@"
do
echo "${var}"
done
#$?可以获取上一个命令的退出状态。
#所谓退出状态,就是上一个命令执行后的返回结果。
#退出状态是一个数字,一般情况下,大部分命令执行成功会返回0,失败返回1。
#不过,也有一些命令返回其他值,表示不同类型的错误。
#$?也可以表示函数的返回值。
echo "Return Value of the Previous Command: $?"
#$$表示当前Shell进程的ID,即pid。
echo "Current Shell Process ID: $$"
命令行参数

shell替换
如果表达式中包含特殊字符,Shell将会进行替换。
例如,在双引号中使用变量就是一种变量替换,转义字符也是一种替换,还有命令替换。
注:
echo默认不转义,也可以使用-E选项禁止转义,可以使用-e选项支持转义。
echo默认插入换行符,可以使用-n选项禁止插入换行符。
#命令替换:
#shell可以先执行命令,将执行结果暂时保存,在适当的地方输出。
#语法:
#`command`
#!/bin/bash
#date显示当前时间
DATE=`date`
echo "Date is ${DATE}"
#who显示目前登入系统的用户信息
#|管道符号 ,上个命令的输出作为下个命令的输入
#wc -l显示行数
USERS=`who | wc -l`
echo "Number of the logged in users is ${USERS}"
#uptime查看系统负载,信息显示依次为:现在时间、系统已经运行了多长时间、目前有多>少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载
#命令间用换行符或者;分隔
UP=`date;uptime`
echo "Uptime is ${UP}"
命令替换

变量替换
变量替换可以根据变量的状态(是否为空、是否定义等)来改变它的值
可以使用的变量替换形式:
| ${var} | 变量本来的值。 |
| ${var:-word} | 如果变量var为空或已被删除(unset),那么返回word,但不改变var的值。 |
| ${var:=word} | 如果变量var为空或已被删除(unset),那么返回word,并将var的值设置为 word。 |
| ${var:+word} | 如果变量var被定义,那么返回word,但不改变var的值。 |
| ${var:?message} | 如果变量var为空或已被删除(unset),那么将消息message送到标准错误输出,可以用来检测变量var是否可以被正常赋值。 若此替换出现在Shell脚本中,那么脚本将停止运行。 |
#!/bin/bash
echo ${var:-"Variable is not set"}
echo "1-Value of var is ${var}"
echo ${var:="Variable is not set"}
echo "2-Value of var is ${var}"
unset var
echo ${var:+"This is a default value"}
echo "3-Value of var is ${var}"
var="prefix"
echo ${var:+"This is a default value"}
echo "4-Value of var is ${var}"
echo ${var:?"Print this message"}
echo "5-Value of var is ${var}"
unset var
echo ${var:?"Print this message"}
echo "6-Value of var is ${var}"
变量替换

shell入门笔记1:执行方式、运行方式、变量、替换的更多相关文章
- shell编程系列1--shell脚本中的变量替换
shell编程系列1--shell脚本中的变量替换 变量替换总结: .${变量#匹配规则} # 从头开始匹配,最短删除 .${变量##匹配规则} # 从头开始匹配,最长删除(贪婪模式) .${变量%匹 ...
- shell入门笔记2:字符串、数组、echo与printf
说明: 本文是关于http://c.biancheng.net/cpp/shell/的相关笔记 shell字符串 字符串可以用单引号,也可以用双引号,也可以不用引号. 1 #!/bin/bash 2 ...
- python执行方式及变量
.python执行方式 (1)交互式:调试方便,无法保存代码 (2)命令行方式:可以永久保存代码 (3)python执行阶段 先启动python解释器,解释器像文本编辑器一样将文件内容从硬盘读到内存, ...
- 第三篇 Python执行方式和变量初始
第一个Python程序 可以打开notepad或者其他文本编辑器,输入:print("Hello Python!"),将文件保存到任意盘符下,后缀名是 .py 两种python程 ...
- shell脚本4种执行方式
Linux中shell脚本的执行通常有4种方式,分别为工作目录执行,绝对路径执行,sh执行,shell环境执行. 首先,看下我们的脚本内容 [tan@tan scripts]$ ll total -r ...
- Python入门笔记(22):Python函数(5):变量作用域与闭包
一.全局变量与局部变量 一个模块中,最高级别的变量有全局作用域. 全局变量一个特征就是:除非被删除,否则他们存活到脚本运行结束,且对于所有的函数都可访问. 当搜索一个标识符(也称变量.名字等),Pyt ...
- 【转】shell学习笔记(三)——引用变量、内部变量、条件测试、字符串比较、整数比较等
1.env显示当前的环境变量 2.PS1='[\u@\h \w \A] \$' 可以设置bash的命令与提示符. 3.echo $$ 显示当前bash的PID号 4.echo $?显示上一条指令的回传 ...
- Shell 入门笔记(一)
Shell简介 在开发过程中Linux系统经常接触和使用的,Shell 是我们用户使用 Linux 的桥梁,是C 语言编写的程序.Shell 是一种命令语言,同时一种程序设计语言.对大多数开发人员来说 ...
- shell脚本的常用执行方式
1.sh+脚本的相对路径 [jinghang@hadoop101 datas]$ sh helloworld.sh helloworld sh+脚本的绝对路径 [jinghang@hadoop101 ...
随机推荐
- python多版本的pip共存问题解决办法
python pip 多版本 问题情景 最开始学python的时候用的是py2,且一直用pip来安装库函数.后来py3出来了,所以就装上了,但是一装上出问题了,主要有两个主要的问题.下面将详细说明. ...
- 如何给sublime text3安装汉化包?so easy 哦
这是我本人亲身测试过的,肯定有效,没用的话怪我咯. 首先安装package control,然后安装汉化包即可,很简单哦!!! 1.安装package control:打开sublime,使用快捷键: ...
- linux—find常见指令用法示例
Linux下find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强da的功能,所以它的选项也很多,其中大部分选项都值得我们花 ...
- 数据库DQL操作(重点)
*****DQL -- 数据查询语言 查询不会修改数据库表记录!一. 基本查询//emp表名1. 字段(列)控制1) 查询所有列 SELECT * FROM 表名; SELECT * FROM em ...
- 【C++】浅谈三大特性之一继承(二)
三,继承方式&访问限定符 派生类可以继承基类中除了构造函数和析构函数之外的所有成员,但是这些成员的访问属性是由继承方式决定的. 不同的继承方式下基类成员在派生类中的访问属性: 举例说明: (1 ...
- IDMC制造业ERP业务场景测试之一——硅钢片制造业务流程测试
一.测试地址 硅钢片业务测试数据库地址为:http://www.bonawifi.com,测试数据库名字为SiliconSteelSheet,测试账号:用户名demo ,密码demo 二.业务说明 根 ...
- 【Flex】编辑器的缩放功能(绝对定位和相对定位)
一.横向的ide拖动缩放效果 <?xml version="1.0" encoding="utf-8"?> <s:WindowedApplic ...
- 【转】Flash字体嵌入方法
原文链接:http://www.cnblogs.com/ddw1997/archive/2011/11/13/2247546.html 一.如果使用flash cs5.5 1.先新建一个字体fla文件 ...
- CSS核心属性
学习目标 1.css浮动属性详解 2.Css文本属性 3.Css列表属性 4.Css背景属性 5.Css边框属性 一.Css浮动属性详解 无论多么复杂的布局,其基本出发点均是:"如何在一行显 ...
- 测试开发Python培训:抓取新浪微博评论提取目标数据-技术篇
测试开发Python培训:抓取新浪微博评论提取目标数据-技术篇 在前面我分享了几个新浪微博的自动化脚本的实现,下面我们继续实现新的需求,功能需求如下: 1,登陆微博 2,抓取评论页内容3,用正则表 ...