0.———->>>>>>>>>if [ “&word” = “condition” ] ;then … fi 注意空格!空格!
1.单引号是直接返回字符串,双引号会将$变量值返回
2.反单引号“中间可以插入其他命令,其返回值可赋值给变量
3.echo $RANDOM会输出0-32767之间的随机数
4.declare -i number=$RANDOM*10/32768 使用declare宣告数值类型: -i int, $RANDOM/32768为0-1 , *n即为0-n
5.declare -a:array -i:int -x:将变量声明为环境变量,与export同 -r:readonly
6.sum=10+20; echo $sum #10+20 由于bash默认变量都为字符,因此,declar -i sum=10+20 此时sum=30
6.$? 为上一条命令的返回值
7.read -p “Please input your word:” -t n word #等待用户n秒,输入的结果放入word变量
8.ulimit 命令可以用来限定登录用户资源使用
9.${variable#str}:从variable变量中删除str(从最前到最后,一个#最短匹配) ${variable##str}:从variable变量中删除str(2个#最长匹配)
10.%为从最后往前删除,%%同理为最长匹配
11.${variable/str1/str2}:将variable中的str1用str2来取代(只取代第一个) ${variable//str1/str2}:将variable中的str1全部用str2来取代
12.username=${username-root} 针对username的值有没有设定来决定”username”的值
变量設定方式 str 沒有設定 str 為空字串 str 已設定非為空字串
var=${str-expr} var=expr var= var=$str
var=${str:-expr} var=expr var=expr var=$str
var=${str+expr} var= var=expr var=expr
var=${str:+expr} var= var= var=expr
var=${str=expr} str=expr var=expr str 不變 var= str 不變 var=$str
var=${str:=expr} str=expr var=expr str=expr var=expr str 不變 var=$str
var=${str?expr} expr 輸出至 stderr var= var=$str
var=${str:?expr} expr 輸出至 stderr expr 輸出至 stderr var=$str
“-“表示没有设定就为”-“后面的字符串,”+”表示已经设定了就为后面的字符串。”:”为严格条件
“=”不会将str赋值,只有当str没有设定的时候才会给str赋值。不同于c++: a=b=c的从右到左赋值。var始终只等于str,不受expr影响
“?”同样,var始终是等于str,不受expr影响
uset str;var=${str?变量不存在} #用来判断变量是否存在的一种方式
13.alias la=’ls -a’ 命令别名 unalias
14.history -n:列出最近n条历史命令 -c:将shell中所有history内容clear -a:将新增指令add到histfiles中,若不存在,加入~/.bash_history
-r:read histfiles的内容到目前shell的history中 -w:write history内容写入histfiles中,histfiles不存在,写入默认~/.bash_history
15. !number:执行history中,第number条指令 !!:执行上一条指令 !command:由最近的指令向前搜寻,执行以command开头的指令
16. head/tail -f -n 10 filename 显示filename文件的头部/尾部内容 -f为循环显示 -n为行数
17. find dir -name filename
18. gawk ‘/pattern1/{action1}/pattern2/{action2}’ filename 如:gawk ‘/bash/{print $2}’ test.txt 在test.txt中找到包含/bash/的记录,打印第2个字段
gawk ‘$1!=”name”{print}’ filename 第一个字段与name不同的所有记录
gawk -F “;” ‘/pattern/{action}’ -F设置分隔符,此处为’;’,如果为”,采用\”进行转义
$3~/pattern/ 表示第三个字段与pattern来匹配 /pattern/: /^b/以b开头的字段 /b$/以b结束的字段 /i.m/存在i的字段 /a|b/a或b匹配的字段 /a*b/a出现0或n次的字段(注意不是以a开头b结尾的字段)
BEGIN{print”Startingtheprocessthefile”}
$1==”UNIX”{print}
$2>10{printf”Thislinehasavalueof%d”,$2}
END{print”Finishedprocessingthefile.Bye!”}
此程序中,先显示一条信息:Startingtheprocessthefile,然后将所有第一个字段等于UNIX的整条记录显示出来,然后再显示第二个字段大于10的记录,最后显示信息:Finished
processingthefile.Bye!。
19.echo $var | cut -d’分隔字元’ -f fields cut: -d表示以某个字符为分隔符 -f为显示第fields个字段
echo $var | cut -c 12- -c表示保存第12个字符-最后的字符,也可以cut -c 12-20 保存12-20区间的字符
20.grep: -c 找到字符串的次数 -i忽略大小写 -n输出行号 -v反选,即显示没有该字符串的行
21.sort: -f 忽略大小写 -b忽略最前面的空白字符 -M以月份排序(JAN,DEC等) -n以数字来排序 -r反向排序 -u相同内容仅出现一行 -t分隔符 -k n以第n栏来作为依据排序(同order by)
默认是以a,b,c,d..来排序
22.last | cut -d ‘ ‘ -f1 | sort | uniq -c(uniq相同内容仅出现一行 c为统计次数,i忽略大小写)
23. cat /etc/man.config | wc
141 722 4617
# 輸出的三個數字中,分別代表: 『行、字數、字元數』 -l 仅列出行数 -w仅列出单词个数(words) -c字节数(bytes) -m字符个数
24.ls -l / | tee -a ~/homefile | more tee为双向重导向 一个可以导向到文件,一个导向到屏幕输出 -a为add 即追加到文件,不覆盖原文件
25.last | tr ‘[a-z]’ ‘[A-Z]’ 表示将小写字母替换成大写字母 tr: -d 删除字符串 -s取代掉重复的字元
26.cat /etc/man.config | col -x | cat -A | more col -x通常用来将tab符号用空白符号替代
27.join -t ‘:’ /etc/passwd /etc/shadow 将第二个文件加入到第一个文件 join: -t 分隔符 -i忽略大小写 -1 n第一个文档以第n个字段来做匹配基准 -2 m第二个文档以第m个字段来匹配
28.paste [-d] file1 file2 将file1和file2合并 -d为分隔符,默认是tab,即file1.line1(tab)file2.line1
29.expand [-t] file 将tab键用-t个空格代替 unexpand
30.split -b 300k /etc/termcap termcap 将一个文档分割为多个文档 -b为设定大小 termcap为前缀,分割后为termcapaa,termcapab,ac..
31. find /sbin -perm +7000 | xargs ls -l 因为ls不是管道命令,即前一条命令的结果不能通过管道(|)传递给ls,此时使用xargs,将结果变为stdin传递给ls
32.#====================遍历文件内容=====================
cat test.txt > while read oneline;do
echo $oneline
done
#===================================================
33.-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
34.case $var in
pattern)
command ;;
*) command ;;
esac
35. sed -i ‘s/str1/str2/g’ filename 将filename中的str1用str2替代
sed -i ‘s/str1/str2/g’ | `grep str1 -rl /dir` dir下的str1文件名改为str2
sed ‘y/1234567890/abcdefghij/’ filename -y 1234567890与abcdefghij一一对应替换(1->a 2->b)
sed -i ‘s/^str1.*$/str2/g’ filename 将str1开头的这一行所有内容替换成str2
36.awk ‘{n=NR;if(n==1)n=2;else if(n==2)n=1;print n,$0}’ filename|sort -n -k1|cut -d ” ” -f2- 交互文件的第一与第二行(或其他任意行)