bash的工作特性及其使用方法
bash的工作特性之命令执行状态返回值和命令展开所涉及的内容及其示例演出
!脚本执行与调试
1、绝对路径执行,要求文件有执行权限
2、以sh命令执行,不要求文件有执行权限
3、.加空格或source命令执行,脚本将在当前shell中执行
4、检查脚本语法
bash -v test.sh
5、跟踪脚本执行
bash -x test.sh
!环境脚本执行规则
用户登录:/etc/profile、/.bash_profile、/.bash_login、~/.profile
用户注销:~/.bash_logout
执行新shell: /etc/bash.bashrc、~/.bashrc
执行script(使用#!/bin/bash):如指定BASH_ENV的值,则执行其指定的启动文件
执行script(使用#!/bin/sh):不调用任何环境脚本
!基本语法
1、脚本程序以#!/bin/bash 开始。以告之系统脚本以何种shell执行。
2、以#开头的行被视为注解,执行时自动忽略。
3、每行不得多于255个字节,可在行末加上反斜杠的方式拆分单行内容到多行中。
例如:
test1=abcdefg
hij
klmnopq
rstuvwxyz
4、多命令以分号分隔时,命令从左至右依次执行。
例如: whoami;w
5、多命令以&&分隔时,命令从左至右按前面命令执行成功后再执行下个命令的原则依次执行。
例如:make && make install
6、多命令以||分隔时,命令从左至右按前面命令执行失败后再执行下个命令的原则依次执行。
7、多个命令以分号分隔放置()中,则会启用子shell并执行。
例如:(mkdir testdir;cd testdir;touch testfile)
8、多个命令以分号分隔放置{}中,则会在当前shell中执行。需要注意的是命令和{}必须有空格间隔,并且最后一条命令也必须加分号。
例如:{ mkdir testdir;cd testdir;touch testfile; }
9、被反引号`括起来的命令或$(命令),shell将直接引用执行结果。
例如:
test=date
test=$(date)
10、可以将算术运算式以$[ 算术运算式 ]的形式进行求值。注意算术运算式和[]必须有空格分隔,此方法只支持整型运算。
例如:test=$[ 32 * 17 ]
11、使用$((运算式))的形式也可以进行算术运算求值,并且可以进行布尔运算。
例如:test=$(( 32 * 17 ))
12、使用let 运算式也能进行算术运算,算术式各元素间不得有空格,否则应将算术式用引号括起来。
例如:let ++test
13、任何命令执行后均会返回一个取值范围在0~255之间的整型返回码。主要值含义如下:
0:正常结束
1:通用执行错误
2:误用shell命令
126:命令不可执行
127:命令未找到
128:无效退出参数
130:被ctrl-c强行中止
255:退出状态码越界
shell script默认返回最后一条命令的返回码。可以使用exit退出script执行并返回指定的返回码。
例如:exit 15
通过$?这个系统变量可以获取上一条命令的返回码。
例如:
sync
echo $?
14、通过getopts命令获取命令行选项。
语法为:getopts 选项行 选项变量。
选项行由各选项的单一字符组成,如某选项字符需要参数,则在选项字符后加冒号。调用时此选项后无参数的话系统会提示错误,如不希望出现提示则应在选项行最前面加上冒号。系统会将参数存入OPTARG变量。
例如:
#!/bin/bash
while getopts :a:bc opt
do
case $opt in
a)
echo "选项a,后跟参数:$OPTARG";;
b)
echo "选项b";;
c)
echo "选项c";;
*)
;;
esac
done
15、利用mktemp建立临时文件
语法为:mktemp 选项 临时文件模板
如果建立成功返回0。
临时文件模板格式形式如:/tmp/test.XXXXXX或/usr/ttt/tttt.XXXXXX,文件名末6个字符必须为XXXXXX.生成成功后会由系统代替为随机6个字符。
选项-q 不产生错误信息。
选项-p 指定建立临时文件的父级目录,父级目录必须已存在。例如:mktemp -p /usr/tmp tf.XXXXXX
选项-t 按环境变量TMPDIR变量中指定的父级目录建立临时文件,如变量未定义,则父级目录为/tmp
选项-d 建立的是临时目录。
直接执行mktemp,会在/tmp目录下建立tmp.XXXXXX形式的临时文件,文件名末6个字符为随机字符。可使用下面方式获取生成的文件名。
tmpfile=$(mktemp)
bash的工作特性及其使用方法的更多相关文章
- linux_曝出重大bash安全漏洞及修复方法
日前Linux官方内置Bash中新发现一个非常严重安全漏洞(漏洞参考https://access.redhat.com/security/cve/CVE-2014-6271 ),黑客可以利用该Bas ...
- bash的工作特性(2)
bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示. 命令的执行结果状态 成功,失败 bash使用特殊变量$?保存最近一条命令的执行状态结果:echo$? 0:成功 1-255 ...
- shell报错:-bash: [: ==: 期待一元表达式 解决方法 ([: ==: unary operator expected)
shell报错:-bash: [: ==: 期待一元表达式 解决方法 ([: ==: unary operator expected) blogdaren 2015-02-26 抢沙发 14916人 ...
- 在Windows中运行Linux bash命令的几种方法
如果你正在课程中正在学习 shell 脚本,那么需要使用 Linux 命令来练习命令和脚本. 你的学校实验室可能安装了 Linux,但是你自己没有安装了 Linux 的笔记本电脑,而是像其他人一样的 ...
- [日常工作] cmd以及bash 直接使用当前目录的方法
1. 从知乎学到了一点.. 2. 之前想在比如f:\a\b 目录下执行cmd命令的时候 总是需要先 f: 再cd目录的方式. 3. 知乎上面学到 发现可以通过在当前目录下面 输入 cmd 或者是 b ...
- windows Git Bash 无法运行python解决方法
以前运行cmd命令都是在cmd里面的,但是那个页面实在是太丑了,后面我就全部用git bash来运行window下的命令了. 但是在git bash 中运行下python – -version 或 p ...
- 修改profile导致bash不能用的补救方法
输入这条命令:export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin 由于shell命令基本都在/usr/bin,/usr/sbin,/bin ...
- bash{} 方法总结
假设我们定义了一个变量为: file=/dir1/dir2/dir3/my.file.txt 我们可以用 ${ } 分别替换获得不同的值: ${file#*/}:拿掉第一条 / 及其左边的字串:dir ...
- [转] Bash脚本:怎样一行行地读文件(最好和最坏的方法)
用bash脚本读文件的方法有很多.请看第一部分,我使用了while循环及其后的管道命令(|)(cat $FILE | while read line; do … ),并在循环当中递增 i 的值,最后, ...
随机推荐
- 新概念英语(1-23)Which glasses?
Which glasses does the man want? A:Give me some glasses please, Jane? B:Which glasses? These glasses ...
- maven常见问题处理(3-2)maven打包时跳过测试的几个方法
运行mvn install时跳过Test方法一:<project> [...] <build> <plugins> <plugin> <group ...
- NHibernate从入门到精通系列(2)——NHibernate环境与结构体系
内容摘要 NHibernate的开发环境 NHibernate的结构体系 NHibernate的配置 一.NHibernate的开发环境 NHibernate的英文官方网站为:http://nhfor ...
- CMDB资产采集
Agent(方式) 1:服务器每台都需要安装Agent 达到采集速度快,简单:造成性能损耗 获取每台服务器的资产并有返回值:v=subprocess.getoutput('dir')或者ipconfi ...
- awk、变量、运算符、if多分支
awk.变量.运算符.if多分支 awk: 语法 awk [options] 'commands' files option -F 定义字段分隔符,默认的分隔符是连续的空格或制表符 使用option中 ...
- highstaock+websocket实现动态展现
效果:从后台获取回测数据,在前端动态展现,和聚宽实现的回测效果相仿 大体思路:先传一个[[int,0],[int,0],[int,0],[int,0],[int,0],...]格式的死数据到前端渲染x ...
- 小技巧-ASP.Net session保存在数据库服务器
引用博客:http://www.cnblogs.com/lykbk/archive/2013/01/13/hf576856868.html web Form 网页是基于HTTP的,它们没有状态, 这意 ...
- Python模块 - configparser
configparser模块用来对配置文件进行操作 1.获取所有块 import configparser config = configparser.ConfigParser() config.re ...
- 【转】Apache服务器安全配置
源URL:http://foreversong.cn/archives/789 偶然下载了今年ISC大会360应急响应中心的一个ppt,在最后有个攻防领域专家注册考试目录,其中有很大一块就是中间件的安 ...
- [HAOI 2009]逆序对数列
Description 对于一个数列{ai},如果有i<j且ai>aj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组成的 数列,可以很容易求出有多少个逆序对数.那么逆 ...