shell 入门学习
title: shell 入门学习
date: 2019/7/16 15:47:49
toc: true
shell 入门学习
linux c 一站式学习笔记
注释
使用#注释一行
#!在第一行称为 Shebang,表示脚本解释器是什么,比如!# bin/bash
执行与启动
文件首行的
!#不仅可以指定程序,还能指定参数#! /bin/sed -f,增加了这个shebang的脚本可以不用指定程序,直接使用./xxx.脚本执行man bash-builtins查看内建命令为什么需要内建命令?
shell的外部命令流程是先fork出一个shell后执行exec执行命令,fork后返回会恢复父进程的上下文,所以诸如cd等命令就不能产生效果了
内建命令使用
$?读出返回的状态命令行下输入的命令用()括号括起来,那么也会fork出一个子Shell执行小括号中的命令
使用
source xxx.sh或者. ./xxx.sh改变子进程,不会影响交互式(父)shell交互登录bash的环境变量顺序 搜索
A *login shell* is one whose/etc/profile
~/.bash_profile, ~/.bash_login, and ~/.profile
退出
/etc/bash.bash_logout
交互非登陆bash读取文件
~/.bashrc,使用--norc禁用这个操作非交互启动bash,执行子命令的fork,由环境变量
BASH_ENV决定, 它的值当作启动脚本的文件名sh启动的bash,尽量模拟上述三种bash
- 带有
--login,模拟交互登录bash的环境变量顺序,/etc/profile ~/.profile - 交互bash,展开变量
if [ -n "$ENV" ]; then . "$ENV"; fi - 非交互Shell启动,例如
#! /bin/sh,则不执行任何启动脚本
- 带有
变量
*匹配0或者任意个字符?匹配一个任意字符[xxx],匹配方括号中任意一个字符的一次出现
` 和 $() 命令代换明显执行后计算结果复制变量
- `$(())`变量转换为整数,只能做加减乘除的整数运算
- 转义字符是`\`,shell输入时还表示换行继续
- 创建带有`-`开头的文件`touch -- -a.c`
- 双引号用于保持引号内所有字符的字面值(回车也不例外),但以下情况除外:
```
$加变量名可以取变量的值
反引号仍表示命令替换
\$表示$的字面值
\`表示`的字面值
\"表示"的字面值
\\表示\的字面值
除以上情况之外,在其它字符前面的\无特殊含义,只表示字面值
$0 命令本身 $1、 $2.. 参数 $# 参数个数,不包括$0 $@ 表示参数列表"$1" "$2" ...,例如可以用在for循环中的in后面。 $? 上一条命令的Exit Status $$ 当前Shell的进程号 shift shift 3表示原来的$4现在变成$1,不带参数的shift命令相当于shift 1
语法
参考
/etc/init.d/下的脚本
if
then
elif
then
else
fi
case $xxx in
a)
...
;;
b)
...
;;
*)
esac
for xxx in xxxx
done
while xxx;do
xxx
done
true =0,false=1,这与c语言相反
命令
test和[可以测试条件是否成立$?是退出状态-eq(等于) -ne(不等于)
-lt(小于) -le(小于等于)
-gt(大于) -ge(大于等于)
测试表达式的连接符号
! 逻辑反
-a 与
-o 或
作为一种好的Shell编程习惯,应该总是把变量取值放在双引号之中,比如
"$VAR",p602 linuxc 一站式编程多个命令在一行用
;隔开,一行一个命令不需要;:是一个特殊的命令,称为空命令,该命令不做任何事,但Exit Status总是真&&相当于“if...then...”,而||相当于if not...then...$1shell中第一个参数,$0为命令自身,$#是参数个数,布包裹$0函数体的左花括号{和后面的命令之间必须有空格或换行,如果将最后一条命令和右花括号}写
在同一行,命令末尾必须有;号,函数调用不写括号mkdir $DIR > /dev/null 2>&1,这里先将标准输出重定位到null,然后标准错误输出也到标准输出,使用&的原因是这里是引用标准输出,不加引号的话就是1这个文件了
调试
| -n | 读取不执行.类似编译 |
|---|---|
| -v | 一边执行,一遍打印标准错误 |
| -x | 打印执行的每句话和结果 |
使用
$ sh -x ./script.sh
#! /bin/sh -x
脚本中设置,set -x和set +x分别表示启用和禁用-x参数,这样可以只对脚本中的某一段进行跟踪调试
#! /bin/sh
if [ -z "$1" ]; then
set -x
echo "ERROR: Insufficient Args."
exit 1
set +x
fi
shell 入门学习的更多相关文章
- Hadoop入门学习笔记---part3
2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...
- PyQt4入门学习笔记(一)
PyQt4入门学习笔记(一) 一直没有找到什么好的pyqt4的教程,偶然在google上搜到一篇不错的入门文档,翻译过来,留以后再复习. 原始链接如下: http://zetcode.com/gui/ ...
- git入门学习(一):github for windows上传本地项目到github
Git是目前最先进的分布式版本控制系统,作为一个程序员,我们需要掌握其用法.Github发布了Github for Windows 则大大降低了学习成本和使用难度,他甚至比SVN都简单. 一.首先在g ...
- Shell 脚本学习资料搜集
Shell文档 ChinaUnix上大神“網中人”总结的Shell十三问,强烈推荐,这本书讲得比较精炼,而且都是一些Shell学习中容易把握不住的一些细节难点.每一问都写得非常精彩.ChinaUnix ...
- Shell简易学习练习
1.Linux Shell入门 Quiz 1 一个接受命令行参数的shell脚本 任务 编写一个shell脚本1.sh,这个脚本接受一个命令行参数,并把这个参数打印两次到标准输出. 如果输入没有参数输 ...
- 转 shell脚本学习指南
shell脚本学习指南 以下八点不敢说就能成为你shell脚本学习指南de全部,至少可以让你编写出可靠的shell脚本. 1. 指定bashshell 脚本的第一行,#!之后应该是什么?如果拿这个问题 ...
- VBox&vmware虚拟机安装Linux及Linux基础入门学习
VBox&vmware虚拟机安装Linux及Linux基础入门学习 通过VMware workstation安装Linux 在安装虚拟机之前,我特意上网搜索了一下目前常使用的虚拟机软件,了解了 ...
- 【数据库】7.0 MySQL入门学习(七)——MySQL基本指令:帮助、清除输入、查询等
1.0 help == ? 帮助指令,查询某个指令的解释.用法.说明等.详情参考博文: [数据库]6.0 MySQL入门学习(六)——MySQL启动与停止.官方手册.文档查询 https://www. ...
- 【数据库】4.0 MySQL入门学习(四)——linux系统环境下MySQL安装
1.0 我的操作系统是CentOS Linux release 7.6.1810 (Core) 系统详细信息如下: Linux version 3.10.0-957.1.3.el7.x86_64 ( ...
随机推荐
- mysql慢查询日志查找与分析
mysql下执行SHOW VARIABLES LIKE '%slow_query_log%' 上图我这是本地的mysql,慢查询没开. slow_query_log :ON和OFF分别表示慢查询有没有 ...
- Oracle 后台进程(二)DBWR进程
一.DBWR进程介绍 DBWR进程执行将数据块缓冲区写入数据文件的工作,是负责缓冲存储管理的一个Oracle后台进程.在修改DB Cache中的某个缓冲区时,会将它标志为“DIRTY”,DBWR的主要 ...
- ueditor+粘贴word
Chrome+IE默认支持粘贴剪切板中的图片,但是我要发布的文章存在word里面,图片多达数十张,我总不能一张一张复制吧?Chrome高版本提供了可以将单张图片转换在BASE64字符串的功能.但是无法 ...
- bzoj 1924
所用点的编号为输入顺序,因为只有在存在联通门的宫室中存在宝藏.其余点不考虑 对于每一行,选定一个横天门,向该行横天门连双向边,其余门单向边纵列同理自.由门用map判周围八个点是否存在,存在即连边 Ta ...
- 虚拟机Linux无法查看本地ip地址 解决办法
解决方案: 1.虚拟机与本机采用的连接方式为:Host-only模式,其中几种连接模式的区别我不做介绍,自己百度.如果之前连接方式不为Host-only,更改之后需要重新启动虚拟机. 2.将本机的两块 ...
- vue中父组件如何监听子组件值的变化
vue中我们会遇到很多父子组件通信的需求, 下面简单列一下,父子组件通信的几种情况 1:父组件向子组件传值:使用prop向子组件传值: 2:子组件实时监听父组件传来的值的变化:使用watch去监听父组 ...
- vxe-table 可编辑表格 行内编辑以及验证 element-UI集成
<vxe-table border show-overflow ref="xTable" ----------------------------------------- ...
- python常用模块介绍
关于if __name__ == "__main__": 若执行文件为bin,调用文件为cal: 若在执行文件bin中执行print(__name__) 输出:__main__ 当 ...
- codeforces#1215E. Marbles(状压dp)
题目链接: http://codeforces.com/contest/1215/problem/E 题意: 至少多少次操作可以使得相同的数都是相邻的 每次操作可以交换两个相邻的数 数据范围: $1\ ...
- 解决Android Studio 打开Flutter 项目,找不到设备的问题
开始设置了ANDROID_HOME环境变量后,发现Flutter 识别不了安卓SDK, 使用命令配置发现配置是失败的,貌似是不支持路径里有空格 复制一份SDK到没有空格的路径后,SDK就能识别了,并且 ...