03-Linux编程
what
why
- how
shell bash
解释器
- 用户交互输入
- 文本文件输入
启动器
读取方式
当前shell
- source test.txt
- . test.txt
新建子shell
- /bin/bash file
- ./file
脚本本质
#!/bin/bash
#!/usr/bin/python
命令
pstree(进程树)
echo
-
echo $$
- 当前进程ID号
-
echo -e
- 识别换行符
exec
-
exec ls -l /
- 执行命令后退出
-
exec 9<> /dev/tcp/www.baidu.com/80
-
echo -e “GET / HTTP/1.0\n” 1>&9
-
cat 0<& 9
函数
一切皆命令
ooxx(){echo $$}
- ooxx
文本流&重定向
重定向:不是命令
程序本身都有I/O
- cd /proc/**/fd
- 0:标准输入
- 1:标准输出
- 2:错误输出
一切皆文件
-
/proc/$$/fd
-
exec 6>&1
- 备份
-
exec 1 > /dev/pts/1
- 更改输入
-
exec 1>&6
- 恢复
-
控制程序I/O位置
输出实例
-
ls -l / 1> ls.out
- 将ls1标准输出流重定向为文件,注意(1>不能含有空格)
-
ls -l / 1>> ls.out
- 将ls1标准输出流重定向为文件,注意(1>不能含有空格)>>追加
-
ls -l /bucunzai 2> x.out
- 错误输出
-
ls -l /usr /bucunzai 1> ls1.ouot 2>ls2.out
- 错误和正确分别输出
-
ls -l /usr /bucunzai 1>> ls3.ouot 2>>ls2out
- 错误和正确输出同一文件
-
ls -l /bucunzai /usr 2>&1 1> ls4.out
-
把2重定向1时,1前面要加&(错误写法)
-
ls -l /bucunzai /usr 1>ls5.out 2>&1
- 把2重定向1时,1前面要加&,(正确写法)
-
-
ls -l /god /usr >& ls6.out
- 正确错误都输出
-
ls -l /god /usr &> ls7.out
- 正确错误都输出
输入实例
-
例
- read sxt
- echo $sxt
-
例
-
read sxt 0<<<“sdfsdf”
- 一行文本
-
-
例
-
read sxt 0<<ooxx
- (多行文本)表示开启阻塞模式,直至输入ooxx为止阻塞停止,但是读取时只读回车符前内容
-
-
例
-
cat 0< x.sh
- 一个<放文本,两多行,三个一行
-
变量
本地
- 当前shell拥有
- 生命周期随shell
- ame=god
局部
- 只能local用于函数
- val=100
位置
- $1, {11}
- 脚本
- 函数
特殊
-
$#
- 参数个数
-
$1
-
第一个参数
- ${11}第十一个参数
-
-
$*
- 参数列表,双引号引用为一个字符串
-
$@
- 参数列表,双引号引用为单独的字符串
-
$$
- 当前shell的PID
-
$?
- 上一个命令退出状态
环境变量
-
export
- 定义变量
-
unset
- 取消变量
-
set
- 查看shell的变量
引用&命令替换
引用
-
双引号
- 弱引用,参数扩展("$d"可以取值)
-
单引号
- 强引用,不可嵌套(’$d’不取值)
-
花括号扩展不能被引用
-
命令执行前删除引用
命令替换
-
反引号:
ls -l /
- lines=
ls -l / | wc -l
- lines=
-
$(ls -l /)
-
可以嵌套
退出状态&逻辑判断
退出状态
- echo $?
逻辑判断
- command1 && command2
- command1 || command2
实例
- 代码
- 使用
算术表达式
let
- let C= B
$
- C= A+$B]
- C=$(A+B)
expr
- C=
expr $A + $B
条件表达式
-
test
- tset 3 -gt 8
-
[]
- [ 3 -gt 8 ]
流程控制
if
- if [ 3 -gt 8 ] ; then echo ok; else echo no ok; fi
while
- while ls /god; do echo ok;rm -rf /god; done
for
- for ((i=0;i<10;i++));do echo $i; done
- for i in bjsxt shsxt;do echo $i; done
- forfor i in “bj sxt” “sh sxt”;do echo $i; done
case
例
- 代码
例
- 方法
- 扩展