#Linux Shell脚本攻略 ##小试牛刀
shell脚本通常是一个以#!起始的文本文件,是以这样一个被成为shebang的特殊行作为起始的.#!被置于解释器路劲之前,/bin/bash是Bash的路径
- 每个命令或命令序列是以;或换行符来分隔的
- 字符#指明注视的开始
##快捷键
常用 1. 新建终端窗口: crtl+shift+N 1. 终端的漂移/切换:shift+左右箭头 1. 挂 起:crtl+s 1. 解除挂起:crtl+q 1. 清 屏:crtl+l
标签页 1. Shift+Ctrl+T:新建标签页 1. Shift+Ctrl+W:关闭标签页 1. Ctrl+PageUp:前一标签页 1. Ctrl+PageDown:后一标签页 1. Shift+Ctrl+PageUp:标签页左移 1. Shift+Ctrl+PageDown:标签页右移 1. Alt+1:切换到标签页1 1. Alt+2:切换到标签页2 1. Alt+3:切换到标签页3
命令行光标移动: 1. crtl+a 移动到命令行首 1. crtl+e 移动到命令行尾 1. crtl+u 从当前光标所在位置向前清除命令 1. crtl+c 中断操作
tab 命令补全/路径补全/文件名补全: 1. 一次tab是补全 1. 两次tab,列出相关信息
拷贝粘贴: 1. 左键选中(复制) 左右键同时点击(粘贴) 1. alt+tab:切换当前的运行程序
上下箭头:看到命令的输入记录
###终端打印
-
echo 'Hello world !' -
echo Hello world ! -
printf "-5s %-10s %-4.2f\n" 2 James 90.9909
####What's more?
-
echo中转义字符
echo -e "1\t2\t3" -
打印彩色输出
echo -e "\e[1;31m This is red text \e[0em"
###变量与环境变量
- pgrep #获得进程号
- cat /proc//environ #获得与该进程相关的环境变量
- cat /proc//environ | tr '\0' '\n' #变量键值对之间用\0分隔
var=value #赋值操作
var = value #相等操作
echo "We have $count ${fruit} (s)"
环境变量是未在当前进程中定义,而是从父进程中继承而来的变量
export HTTP_PROXY#export命令用来设置环境变量
####Anything Else
-
获取字符串长度
length=${#var} -
识别当前的shell版本
echo $SHELLorecho $0 -
检查是否是超级用户
root用户的UID为0
-
修改Bash提示字符串
修改.bashrc中的PS1参数
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
###通过shell进行数学计算
let result=no1+no2#使用let时不用添加$let no1++&let no2-=6result=$[no1 + no2]result=$[$no + 5]result=$((no1 + 50))result='expr 3 + 4'result=$(expr $no1 + 5)echo "scale=2;ibase=10;obase=2;4*1.354" | bcecho "sqrt(100" | bcecho "10^10" | bc
###文件描述符&重定向 文件描述符是与一个打开的文件或数据相关联的整数,0,1,2是系统预留的
- 0 stdin
- 1 stdout
- 2 stderr
echo "This is sample text 1" > temp.txt#将输出写入文件前,内容首先会被清空echo "This is sample text 2" >> temp.txt#将文本追加在文件后echo "This is sample text 3" 2>> temp.txt#想使用特定文件描述符,就必须将描述符放在操作符之前cmd 2>stderr.txt 1>stdout.txt#cmd不是可执行命令,错误会输出到stderr中cmd 2>&1 output.txtorcmd &> output.txt#将stderr转换为stdout,都重定向到一个文件中cat a* | tee out.txt | cat -n#将std一个副本写入out.txt,另一份作为后续的stdincat a* | tee -a out.txt | cat -n#追加到out.txt
####自定义文件描述符
- 只读模式
- 截断模式
- 追加模式