摘自《Linux shell 脚本攻略》未完待续!!!
转义,格式化
printf "%-5s %-10s %-4.2f\n" 1 Sarath 80.3456
彩色 重置=0,黑色=40,红色=41,绿色=42,黄色=32,蓝色=44,洋红=45,青色=46,白色=47
echo -e "\e[1;31m This is red text \e[0m"
获取进程运行时的环境变量
cat /proc/$PID/eviron
获取进程id
pgrep gedit
获得字符串长度
length=$(#var)
识别当前shell
echo $0
echo $SHELL
检查是否为超级用户
if [$UID -ne 0];then
echo not root
else
echo root
fi
整数运算
no1=4
no2=5
let result=no1+no2
let no+=6
result=$[no1+no2]
result=$[$no1+5]
result=$((no1+50))
result=`expr 3+4`
result=$(expr $no1+5)
浮点运算、精度、进制、平方
echo "4*0.56" | bc
echo "scale=2;3/8" | bc
no=100
echo "obase=2;$no" | bc
no=1100100
echo "obase=10;ibase=2;$no" | bc
echo "sqrt(100)" |bc
echo "10^10" |bc
输出文本重定向到文件
#覆盖
echo "x" > temp.txt
#追加
echo "x" >> temp.txt
#无输出
ls + 2>out.txt
# 分别重定向
cmd 2>stderr.txt 1>stdout.txt
# 都被重定向到同一文件
cmd 2>&1 output.txt
cmd &>output.txt
#丢弃
some_command 2> /dev/null
#从stdin读取,加行号输出
cat a* | tee out.txt |cat -n
#追加
cat a* | tee -a out.txt |cat -n
文件重定向到命令
#从文件读取数据
cmd<file
<
从文件中读取到stdin>
截断模式的文件写入>>
追加模式的文件写入
# 用文件描述符3打开并读取文件
exec 3<input.txt
echo this is a test line>input.txt
exec 3<input.txt
cat <&3
# 用于写入截断
exec 4>output.txt
# 用于写入追加
exec 5>>input.txt
数组
#定义
array_var=(1 2 3 4 5 6)
array_var[0]="test1"
#打印
echo ${array_var[0]}
index=5
echo ${array_var[$index]}
#打印清单
echo ${array_var[*]}
echo ${array_var[@]}
#打印长度
echo ${#array_var[*]}
关联数组
#声明
declare -A ass_array
#内嵌索引声明
ass_aray=([index1]=val1 [index2=val2])
#独立索引声明
ass_array[index1]=val1
#获取索引列表
echo ${!array_var[*]}
echo ${!array_var[@]}
别名
alias install='sudo apt-get install'
alias rm='cp $@ ~/backup; rm $@'
终端信息
#获取终端行数和列数
tput cols
tput lines
#将光标移动到(100,100)
tput cup 100 100
#设置终端背景色 no=0~7
tput setb no
#设置文本前景色
tput serf no
#设置文本样式粗体
tput bold
#设置下划线起止
tput smu1
tput rmu1
#删除当前光标位置到行尾的所有内容
tput ed
阻止将输出发送到终端
echo -e "enter password:"
stty -echo
read password
stty echo
echo
echo password read
获取设置日期和延时
#可阅读的格式
date
#时间戳 秒
date +%s
#日期转时间戳
date --date "Thu Nov 18 08:07:21 IST 2010" +%s
#获取星期
date --date "Jan 20 2001" + %A
#日期格式化打印
data "+%d %B %Y"
#设置日期和时间
date -s "21 June 2009 11:01:22"
- 星期 %a %A
- 月 %b %B
- 日 %d
- 固定格式日期(mm/dd/yy)%D
- 年 %y %Y
- 小时 %I %H
- 分钟 %M
- 秒 %S
- 纳秒 %N
- 时间戳 %s
延时
sleep no_of_seconds
调试脚本
bash -x script.sh
sh -x script
#启用禁止调试打印
#在执行时显示参数、命令
set -x
#禁止调试
set +x
#当命令进行读取时显示输入
set -v
#禁止打印输入
set +v
函数和参数
function fname()
{
statements
}
fname()
{
statements
}
#递归
F(){
echo $1;
F hello;
sleep 1;
}
#导出
export -f fname
#获取命令或函数返回值
echo $?;
#命令传参
command -p -v -k
fname(){
echo $1,$2;#参数1 2
echo "$@";#以列表的方式一次性打印所有参数 "$1" "$2" "$3"
echo "$*";#参数被作为单个实体 "$1c$2c$3" 其中c是IFS的第一个字符
return 0;
}
fork炸弹
:(){ :|:& };:
#读取命令输出,双引号用以保留空格和换行符
output="$(COMMANDS)"
output=`ls | cat -n`
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。