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 的值,最后, ...
随机推荐
- emqtt 试用(六)系统主题
$SYS-系统主题 EMQ 消息服务器周期性发布自身运行状态.MQTT 协议统计.客户端上下线状态到 $SYS/ 开头系统主题. $SYS 主题路径以 "$SYS/brokers/{node ...
- istio入门(04)istio的helloworld-部署构建
参考链接: https://zhuanlan.zhihu.com/p/27512075 安装Istio目前仅支持Kubernetes,在部署Istio之前需要先部署好Kubernetes集群并配置好k ...
- scrapy批量下载图片
# -*- coding: utf-8 -*- import scrapy from rihan.items import RihanItem class RihanspiderSpider(scra ...
- 单链表创建、删除、查找、插入之C语言实现
本文将详细的介绍C语言单链表的创建.删除.查找.插入以及输出功能 一.创建 #include<stdio.h> #include<stdlib.h> typedef int E ...
- Oracle SQL Developer 免费的DB2客户端
问题地址:https://stackoverflow.com/questions/8600735/is-there-any-opensource-db2-client 软件地址:http://www. ...
- arc的安装
安装: # sudo apt-get install php5 php5-curl # ubuntu 系统 # sudo yum install php5 # centos 系统 # cd ...
- [LeetCode] Beautiful Arrangement II 优美排列之二
Given two integers n and k, you need to construct a list which contains n different positive integer ...
- XML 解析默认去掉命名空间和注释
//创建xml文档 XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(@"C:\Users\Tony\Downloads\统一标准报文格 ...
- 认识JQuery,JQuery的优势、语法、多库冲突、JS原生对象和JQuery对象之间相互转换和DOM操作,常用的方法
(一)认识JQuery JQuery是一个JavaScript库,它通过封装原生的JavaScript函数得到一套定义好的方法 JQuery的主旨:以更少的代码,实现更多的功能 (二)JQue ...
- [python]使用django快速生成自己的博客小站,含详细部署方法
前言 人生苦短,我用python 这是之前经常听到的一句笑谈.因为新公司很多业务是用的python语言,所以这几天也一直在学习python的一些东西. 作为一个之前一直java后端的开发人员,对比ja ...