(cd..;ls)当前目录下操作打印上层命令
Linux默认配置文件.bashrc
shell 中的:表示全部为真
【shell命令】
- 外部命令:依赖path环境变量。修改PATH= ,然后source .bashrc让修改生效那么外部命令ls,date,ps 等就会执行失败。
- 内建命令:不依赖path环境变量,即使修改path也不会影响执行。例如:echo pwd等
【shell文件与执行】
- 指定解析器 #!/bin/bash
- ./shell文件名 或者 . shell文件名
【shell语法】
- 数据类型:字符串string
- 变量定义:
环境变量(类似全局变量)
本地变量(类似局部变量)
变量名建议大写,变量定义全是字符串(默认),并且符号间不需要空格。也不需要为字符串添加单引号。例如VAR=10,变量默认是本地变量。export VAR将本地变量变为环境变量
env |grep VAR 过滤变量
env |grep $VAR 取变量名对应的值
删除变量(取消环境变量权限)unset。例如unset VAR
3. 代换:
【命令代换】
(1)文件名代换符Globbing
*匹配0个或者多个任意字符
?匹配一个字符
[若干字符] 匹配方括号中的任意一个字符的出现
Globbing 是在shell下展开的,传给程序的文件应该是执行过匹配之后的结果,比如ls ch?.txt 匹配到三个文件,那么程序将接收到3个文件
命令代换(反引号~ )
VAR=$(data) 或者VAR=~data~ 然后echo VAR
(2)变量的取值
$变量名:取变量的值(不推荐)
${变量名}:取变量的值(推荐)
$(命令):取命令的执行结果
【算数代换】
(1)算数代换(())
VAR=10然后echo $((VAR+5))或者$[VAR+5]或者$((${VAR}+5))
(2)变量取值
$((变量名))或者$[变量名]: 对变量执行算术运算
$[base#n]:base表示进制,n按照base进制解释,后面再有运算数,按照十进制解释。
4. 转义字符
字符转义:\ -- 转特殊意义或者本身意义
5. 引号
单引号:就是字符串打印
双引号:字符串打印,也可以定义变量VAR=~data~ àecho “${VAR}”,在取变量值时都加“”,尤其是在测试条件中的时候
6. 控制语句:
If—else switch—case for while
【条件测试】
整数判别符:整数或者取值为整数的变量 :-eq等于 -ne不等于 -lt小于 -le小于等于 -gt大于 -ge大于等于
类型判断:-d 目录 –f文件 –p管道 –l软连接 –c字符串设备 –b 块设备 –s socket
字符串长度判断,
-z string 空字符串(长度0)
-n 非空字符串(长度非0)
字符串判等:字符串判等只能用=或者!=;a逻辑与 –o逻辑或 !逻辑非
【if分支】
- Shell的分号代表一行结束,也可以不加直接写在下一行
- read 相当于定义了一个起到缓存数据作用的变量,shell执行到read之后会等待用户输入,然后可以将结果带入条件判断。例如:
read YES_OR_NO
If [“YES_OR_NO”=‘yes’]; then
执行逻辑
elif[“YES_OR_NO”=’no’ ];then
执行逻辑
else
执行逻辑
Fi
例如:
vim text.sh
进入文件编写
#! /bin/bash
If [-f text.sh];then
echo ‘ssss’
fi
【case分支】
;;两个分号类似于break,防止case穿透
例如:read YES_NO
case “YES_NO” in
YES|Y|yue)
执行逻辑;;
[nN][oO])
执行逻辑;;
*) #这个相当于其他语言的default
执行逻辑;;
esac
【for循环】
#! /bin/sh
for TEST in ~ls~;do
执行逻辑
done
【while循环】
#! /bin/bash
read passwd
count=1
while [“${passwd}”=’test’ –a “${count}” –lt 10]; do
$count=$[count+1]
echo ‘see you again ’
read passwd
done
7. 位置参数
$0 当前脚本的文件名
$n 传递给脚本或者函数的参数,n是一个数字,表示第几个参数,$1是第一个参数
$# 传递给脚本或者函数的参数个数
$* 传递给脚本或函数的所有参数,但他不取$0
$@ 表示参数列表,一般用在for循环中
$$ 当前shell进程ID
$? 上一个命令的退出状态,或者函数的返回值
shift 左移,命令行参数
【输入输出】
echo 默认跟换行 –e 表示解析转义 –n 表示不回车换行
printf
【管道】
可以通过|管道把一个命令的输出传递给另一个命令做输入
【tee】把结果作为标准输出,副本存储到相应的文件中
ps aux|grep bash |tee out.txt
【重定向】
cmd>file 把标准输出重定向到新文件中
cmd>>file 追加
cmd>file 2>&1 标准出错也重定向到1所指的文件中
0标准输入 1标准输出 2标准出错(无缓冲)
全缓冲(文件) 行缓冲(printf)
cmd>>file 2>&1
cmd<file1 >file2输入输出都定向到文件里
cmd<&fd 把文件描述fd作为标准输入
cmd<&fd 把文件描述符作为标准输出
cmd<&- 关闭标准输入
8. 函数
Shell有函数定义和函数调用之分,但是函数没有参数列表,也没有函数返回值
#! /bin/sh
foo(){
for TEST in $@;do
ls –ld $TEST
done
}
foo $@
(1)函数不需要参数。但是调用时可以传参数进去的例如:函数名 参数1、参数2、…… 、参数N
(2)函数外部的$0和函数内部的$0是一样的
(3)函数外部的$1是命令行的参数和函数内部的$1是函数调用时携带的参数
语法上不支持函数重写、继承、多态等面向对象的方式
9. shell调试
-n 读一遍脚本命令但不执行,检查语法错误./test.sh -n
-v一边执行脚本,一边吧执行脚本的命令打印到标准错误输出 ./test.sh -v
-x 跟踪程序执行的信息,把每一条命令的结果打印出来(+代表程序的每一步,不加+代表) 例如./test.sh –x ,如果只需要一小段那么可以set –x 开始 set +x结束