Bash
ctrl+u/k,删除光标处向前或向后的命令串
ctrl+a/e,光标移动到命令串最前或最后
cmd &, &代表后台执行,配合数据流重定向来查看cmd执行的情况。因为&后台运行默认会直接执行结果显示在屏莫,会影响前台正在执行任务的输出。这个后台是bash的后台,而非系统,所以当bash关掉,任务也会结束
jobs 列出后台执行的任务。 输出的+ -代表最近一,二被放到后台的任务
fg %jobnumber,将后台任务调回前台
变量
- 使用$Var ${var}
- var=abc,设置变量
- ""号内的$var可以解析为变量值
- ''号内的$原样输出
- \ 转义字符
- $( command ) 或
command
, 一串命令中的子命令,子命令先执行 - set 可以查看所有变量。
- $? 上一个命令返回的值
- 子进程会继承父进程的环境变量,不会继承自定义变量
变量的读取,声明
- read var
- declare -[-aixr] var
变量内容的修改
变量设置方式 | 说明 |
---|---|
${var#keyword} | 从前向尾删除符合的最短字串 |
${var##keyword} | 从前向尾前删除符合的最长字串 |
${var%keyword} | 从尾向前删除符合的最短字串 |
${var%%keyword} | 从尾向前删除符合的最长字串 |
${va/oldstring/newstring} | 替换第一个oldstring |
${var//oldstring/newstring} | 替换全部oldstring |
bash 登录欢迎信息
cat /etc/issue
/etc/issue.net, telnet远程登录信息
/etc/motd 让所有用户都知道的信息
- login shell,取得bash时要完整登录流程。读取配置文件 /etc/profile, ~/.bash_profile ~/.bash_login ~/.profile
- non-login shell,取得bash时不需要重复登录操作。读取配置文件 ~/.bashrc /etc/man_db.conf ~/.bash_history ~/.bash_logout
- source 配置文件,读入配置文件
- stty -a,列出所有终端按键与按键内容
通配符
符号 | 意义 |
---|---|
* | 0到无穷多个任意字符 |
? | 一定有一个任意字符 |
[] | 一定有一个括号内的字符 |
[-] | 在编码顺序内的所有字符 |
[^] | 反向选字,不再括号内中的任意字符 |
特殊符号
符号 | 内容 |
---|---|
& | 将命令变成后台执行 |
>, >> | 输出定向,替换与累加,代码为1, stdout |
2>, 2>> | 输出定向,替换与累加,代码为2, stderr |
2>&1> | error, stdout输出到同一个设备 |
<,<< | 输入定向 ,代码为0, stdin |
tee file | 将数据流分送到屏幕与文件 |
() | 子shell的起始与结束 |
{} | 命令区块的起始与结束 |
‘tar -cvf - /home | tar -xvf - -C /tmp/homepack :=’:前面的 - 代表stdin, 后面的- 代表stdout
shell脚本
- sh -n -x 检查语法,将使用到的脚本内容显示到屏幕上,-v 将脚本内容输出到屏幕
- #!/bin/bash ,声明使用的shell
- source xx.sh,让shell文件在父进程执行。 sh xx.sh,会开启一个子进程执行shell文件
- test 测试对象。可以检查一个对象是否存在
- [ -z “${home}” ] ; echo $? ,判断符号,判断变量是否存在
Shell 默认变量
- $#: 参数个数
- $@: ["$1" “$2” “$3”]
- $*: ["$1 $2 $3"]
- shift number. 变量号码偏移量。 会从指定的number开始才算作变量。
Function
function funname(){
xxxxx
}
function内置变量: $0 function name, $1....n,function后接的变量。
条件控制
if [ condition1 ]; then
xxx
elif [ condition1 ]; then
xxxx
else
xxxx
fi
case $var in
"aaa")
xxx
;;
"bbb")
xxx
;;
*)
xxxx
;;
esac
while [ condition ]
do
xxxx
done
until [ condition ]
do
xxxx
done
for var in con1 con2 con3
do
xxxx
done
for ((初始值; 限制值;赋值运算))
do
xxxx
done