当前位置: 首页 > news >正文

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)

 
 
 

转载于:https://www.cnblogs.com/otosis/p/5913976.html

相关文章:

  • ajax执行时提示
  • PHP简单漂亮的分页类
  • 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。...
  • fgets()函数读取键盘,去掉换行符或丢弃多余的字符
  • 解决Only a type can be imported. com.mysql.jdbc.Connection resolves to a package的报错问题
  • Java_I/O输入输出_使用输入输出流读取文件,将一段文字加密后存入文件,然后读取,将加密前与后的文件输出...
  • Servlet类源码说明
  • 连接 insance 到 vlan101 - 每天5分钟玩转 OpenStack(97)
  • 15、限定词
  • Automated Memory Analysis
  • 5.openstack之mitaka搭建计算节点
  • 改变Chrome浏览器主程序_缓存_个人信息路径
  • Xtreme9.0 - Car Spark 动态规划
  • java 计算距离现在几分,几个小时,几天
  • pragma
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Codepen 每日精选(2018-3-25)
  • Git 使用集
  • iOS 颜色设置看我就够了
  • Logstash 参考指南(目录)
  • Meteor的表单提交:Form
  • Python学习之路16-使用API
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • SQLServer插入数据
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • windows-nginx-https-本地配置
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 工作中总结前端开发流程--vue项目
  • 汉诺塔算法
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 使用parted解决大于2T的磁盘分区
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 移动端唤起键盘时取消position:fixed定位
  • 关于Android全面屏虚拟导航栏的适配总结
  • # centos7下FFmpeg环境部署记录
  • #LLM入门|Prompt#3.3_存储_Memory
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (全注解开发)学习Spring-MVC的第三天
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (转)为C# Windows服务添加安装程序
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .Net 4.0并行库实用性演练
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .net core 控制台应用程序读取配置文件app.config
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .net mvc部分视图
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .Net 中Partitioner static与dynamic的性能对比
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...