title: shell 入门学习
date: 2019/7/16 15:47:49
toc: true
---linux
linux c 一站式学习笔记shell
https://ss64.com/bash/syntax.html编程
使用#
注释一行bash
#!
在第一行称为Shebang
,表示脚本解释器是什么,好比!# bin/bash
函数
文件首行的!#
不只能够指定程序,还能指定参数#! /bin/sed -f
,增长了这个shebang
的脚本能够不用指定程序,直接使用./xxx.脚本
执行学习
man bash-builtins
查看内建命令测试
为何须要内建命令?ui
shell的外部命令流程是先fork出一个shell后执行exec执行命令,fork后返回会恢复父进程的上下文,因此诸如cd等命令就不能产生效果了.net
内建命令使用$?
读出返回的状态
命令行下输入的命令用()括号括起来,那么也会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
~/.bashrc
,使用--norc
禁用这个操做BASH_ENV
决定, 它的值看成启动脚本的文件名--login
,模拟交互登陆bash的环境变量顺序,/etc/profile ~/.profile
if [ -n "$ENV" ]; then . "$ENV"; fi
#! /bin/sh
,则不执行任何启动脚本*
匹配0或者任意个字符
?
匹配一个任意字符
[xxx]
,匹配方括号中任意一个字符的一次出现
` 和 $() 命令代换明显执行后计算结果复制变量
$(())
变量转换为整数,只能作加减乘除的整数运算
转义字符是\
,shell输入时还表示换行继续
建立带有-
开头的文件touch -- -a.c
双引号用于保持引号内全部字符的字面值(回车也不例外),但如下状况除外:
$加变量名能够取变量的值 反引号仍表示命令替换 \$表示$的字面值 \`表示`的字面值 \"表示"的字面值 \\表示\的字面值 除以上状况以外,在其它字符前面的\无特殊含义,只表示字面值
$0 | 命令自己 |
---|---|
$一、 $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...
$1
shell中第一个参数,$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