shell命令集
shell 常⽤知识点
---------------------------------------
eg:
echo 123 >
sed -i "s/123/456/"
droid05@Exdroid:~/myworkspace/sed$
456
-p 地址是⼀个数字,则表⽰⾏号;是“$"符号,则表⽰最后⼀⾏
------------------
<
sed -n '3p' datefile //输出第三⾏的内容
sed -n '100,200p' datefile // 查看100~200⾏的内容
sed '/my/p' datefile //输出匹配到my的⾏并且再次打印⼀次同时打印其他全部内容,若没匹配输出其他内容
sed -n '/my/p' datefile //仅仅输出匹配到的⾏的内容
-d
--------------------
sed '2,5d' datafile #删除第⼆到第五⾏输出其他内容
sed '/My/,/You/d' datafile #删除包含"My"的⾏到包含"You"的⾏之间的⾏
sed '/My/,10d' datafile #删除包含"My"的⾏到第⼗⾏的内容
-s
-----------------------
sed 's/^My/You/g' datafile #命令末端的g表⽰在⾏内进⾏全局替换,也就是说如果某⾏出现多个My,所有的My都被替换为You。
sed -n '1,20s/My$/You/gp' datafile #取消默认输出,处理1到20⾏⾥匹配以My结尾的⾏,把⾏内所有的My替换为You,并打印到屏幕上。sed 's#My#Your#g' datafile #紧跟在s命令后的字符就是查串和替换串之间的分隔符。
分隔符默认为正斜杠,但可以改变。⽆论什么字符(换⾏符、反斜线除外),只要紧跟s命令,就成了新的串分隔符。
-e -e是编辑命令,⽤于sed执⾏多个编辑任务的情况下。在下⼀⾏开始编辑前,所有的编辑动作将应⽤到模式缓冲区中的⾏上
--------------------
sed -e '1,10d' -e 's/My/Your/g' datafile #选项-e⽤于进⾏多重编辑。第⼀重编辑删除第1-3⾏。
第⼆重编辑将出现的所有My替换为Your。因为是逐⾏进⾏这两项编辑(即这两个命令都在模式空间的当前⾏上执⾏),
所以编辑命令的顺序会影响结果。
r 命令是读命令。sed使⽤该命令将⼀个⽂本⽂件中的内容加到当前⽂件的特定位置上。
----------
sed '/My/' datafile
#如果在⽂件datafile的某⼀⾏匹配到模式My,就在该⾏后读⼊⽂件的内容。
如果出现My的⾏不⽌⼀⾏,则在出现My的各⾏后都读⼊⽂件的内容。
w 命令
------------------
sed -n '/my/' datafile
y 命令
-----------
sed '1,20y/my12/MY^$/' datafile
#将1到20⾏内,所有的⼩写hrwang转换成⼤写,将1转换成^,将2转换成$。
#正则表达式元字符对y命令不起作⽤。与s命令的分隔符⼀样,斜线可以被替换成其它的字符。
2.获取对于的⾏的内容
sed -n '1,np' <file>
eg:
echo 123456 >
sed -n '1p' > sed.log
cat sed.log
123456
3. 打印模式匹配对于的⾏的内容
sed -n '/需要查的内容/'p <file>
eg:
droid05@Exdroid:~/myworkspace/sed$ sed -n '/ro.build.display.id/'p build.prop
ro.build.display.id=fiber_chiphd-eng 4.2.2 JDQ39 20140425 test-keys
sed
------
选项功能
-e 进⾏多项编辑,即对输⼊⾏应⽤多条sed命令时使⽤
-n 取消默认的输出
-f 指定sed脚本的⽂件名
4. 判断语句
1>.⽂件名称的测试
-e filename 如果 filename存在,则为真
-d filename 如果 filename为⽬录,则为真
-f filename 如果 filename为常规⽂件,则为真
-L filename 如果 filename为符号链接,则为真
-r filename 如果 filename可读,则为真
-w filename 如果 filename可写,则为真
-x filename 如果 filename可执⾏,则为真
-s filename 如果⽂件长度不为0,则为真
-h filename 如果⽂件是软链接,则为真
filename1 -nt filename2 如果 filename1⽐ filename2新,则为真。
filename1 -ot filename2 如果 filename1⽐ filename2旧,则为真。
2>. 数字测试
-eq 等于则为真。
-ne 不等于则为真。
-gt ⼤于则为真。
-ge ⼤于等于则为真。
-lt ⼩于则为真。
-le ⼩于等于则为真。
⾄于!号那就是取⾮
num1 -eq num2 等于 [ 3 -eq $mynum ]
num1 -ne num2 不等于 [ 3 -ne $mynum ]
num1 -lt num2 ⼩于 [ 3 -lt $mynum ]
num1 -le num2 ⼩于或等于 [ 3 -le $mynum ]
num1 -gt num2 ⼤于 [ 3 -gt $mynum ]
linux循环执行命令脚本num1 -ge num2 ⼤于或等于 [ 3 -ge $mynum ]
3>. 字符串测试
= 等于则为真。
  != 不相等则为真。
  -z字串字串长度伪则为真。
  -n字串字串长度不伪则为真。
-z string 如果 string 长度为零,则为真 [ -z "$myvar" ]
-n string 如果 string 长度⾮零,则为真 [ -n "$myvar" ]
string1 = string2 如果 string1 与 string2 相同,则为真 [ "$myvar" = "one two three" ] 判断$a和$b是否相等string1 != string2 如果 string1 与 string2 不同,则为真 [ "$myvar" != "one two three" ]
if [ "$ver" ];then
若字符串存在则为真
fi
⼀、判断读取字符串值
Bash Shell可以进⾏变量的条件替换,既只有某种条件发⽣时才进⾏替换,替换条件放在{}中.
(1) ${value:-word}
当变量未定义或者值为空时,返回值为word的内容,否则返回变量的值.
(2) ${value:=word}
与前者类似,只是若变量未定义或者值为空时,在返回word的值的同时将 word赋值给value
(3) ${value:?message}
(4) ${value:+word}
若变量已赋值的话,其值才⽤word替换,否则不进⾏任何替换
(5) ${value:offset}
${value:offset:length} 从变量中提取⼦串,这⾥offset和length可以是算术表达式.
(6) ${#value}
变量的字符个数
(7) ${value#pattern}
${value##pattern}
去掉value中与pattern相匹配的部分,条件是value的开头与pattern相匹配
#与##的区别在于⼀个是最短匹配模式,⼀个是最长匹配模式.
(8) ${value%pattern}
${value%%pattern}
于(7)类似,只是是从value的尾部于pattern相匹配,%与%%的区别与#与##⼀样
(9) ${value/pattern/string}
${value//pattern/string}
进⾏变量内容的替换,把与pattern匹配的部分替换为string的内容,/与//的区别与上同
注意: 上述条件变量替换中,除(2)外,其余均不影响变量本⾝的值
⼆、字符串操作(长度,读取,替换)
表达式含义
${#string} $string的长度
${string:position} 在$string中, 从位置$position开始提取⼦串
${string:position:length} 在$string中, 从位置$position开始提取长度为$length的⼦串
${string#substring} 从变量$string的开头, 删除最短匹配$substring的⼦串
${string##substring} 从变量$string的开头, 删除最长匹配$substring的⼦串
${string%substring} 从变量$string的结尾, 删除最短匹配$substring的⼦串
${string%%substring} 从变量$string的结尾, 删除最长匹配$substring的⼦串
${string/substring/replacement} 使⽤$replacement, 来代替第⼀个匹配的$substring
${string//substring/replacement} 使⽤$replacement, 代替所有匹配的$substring
${string/#substring/replacement} 如果$string的前缀匹配$substring, 那么就⽤$replacement来代替匹配到的$substring ${string/%substring/replacement} 如果$string的后缀匹配$substring, 那么就⽤$replacement来代替匹配到的$substring 字符串长度计算 echo ${#test} // # 取字符串长度
4>. 算术运算符
+ - * / % 表⽰加减乘除和取余运算
+= -= *= /= 同 C 语⾔中的含义
5>. 位操作符
> >>= 表⽰位左右移⼀位操作
& &= | |= 表⽰按位与、位或操作
~ ! 表⽰⾮操作
^ ^= 表⽰异或操作
6>.关系运算符
= == != 表⽰⼤于、⼩于、⼤于等于、⼩于等于、等于、不等于操作
&& || 逻辑与、逻辑或操作
5. 注释
1. # 开头
2.
6. find ⽤法
find . -name \*
find ./ -name "xxx"
find . -mtime -1 -type f -print ⽤来查过去24⼩时(-mtime -2则表⽰过去48⼩时)内修改过的⽂件
find . -size +1000c -print
如果您想将所有查到的⽂件打⼀个包,则可以使⽤以下脚本
#!/bin/sh
tar -zcvf `find . -mtime -1 -type f -print`
find . -name proj_help.sh | awk -F/ '{print $(NF-4) "/"}'
9. "if" 表达式如果条件为真则执⾏then后⾯的部分:
  if ....; then
  ....
  elif ....; then
  ....
  else
  ....
  fi
10. case表达式可以⽤来匹配⼀个给定的字符串,⽽不是数字。
case ... in
...) do something here
esac
11. select 表达式是⼀种bash的扩展应⽤,尤其擅长于交互式使⽤。⽤户可以从⼀组不同的值中进⾏选择。select var in ...do
break
  done
  .... now $var can be used ....
eg:
#!/bin/sh
  echo "What is your favourite OS?"
  select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do
  break
  done
  echo "You have selected $var"
  下⾯是该脚本运⾏的结果:
  What is your favourite OS?
  1) Linux
  2) Gnu Hurd
  3) Free BSD
  4) Other
  #? 1
  You have selected Linux
12. while 您也可以在shell中使⽤如下的loop表达式:
while ...; do
  ....
  done
  while -loop 将运⾏直到表达式测试为真。 will run while the expression that we test for is true.
关键字"break" ⽤来跳出循环。⽽关键字"continue"⽤来不执⾏余下的部分⽽直接跳到下⼀个循环。
for-loop表达式查看⼀个字符串列表 (字符串⽤空格分隔) 然后将其赋给⼀个变量:
  for var in ....; do
  ....
  done
eg:
#!/bin/sh
  for var in A B Cdo
  echo "var is $var"
  done
13. echo
-------------------------
字背景颜⾊范围:40 - 49
41:深红
42:绿
43:黄⾊
44:蓝⾊
45:紫⾊
46:深绿
47:⽩⾊
-----------------------
字颜⾊:30 - 39
30:⿊
31:红
32:绿
33:黄
34:蓝⾊
35:紫⾊
36:深绿
37:⽩⾊
-----------------------
ANSI控制码
\33[0m 关闭所有属性
\33[01m 设置⾼亮度
\33[04m 下划线
\33[05m 闪烁
\33[07m 反显
\33[08m 消隐
\33[30m -- \33[37m 设置前景⾊
\33[40m -- \33[47m 设置背景⾊
\33[nA 光标上移n⾏
\33[nB 光标下移n⾏
\33[nC 光标右移n⾏
\33[nD 光标左移n⾏
\33[y;xH设置光标位置
\33[2J 清屏
\33[K 清除从光标到⾏尾的内容
\33[s 保存光标位置
\33[u 恢复光标位置
\33[?25l 隐藏光标
\33[?25h 显⽰光标
----------------------------
eg:
echo -e "\033[31m xxx \033[0m"
echo -e "\e[1;32m xxx \e[0m "
eg:
#!/bin/bash
a=10
echo -e "Value of a is $a \n"
运⾏结果:
Value of a is 10
-e 表⽰对转义字符进⾏替换。如果不使⽤ -e 选项
若没有参数,运⾏结果:
Value of a is 10 \n
14. tr
echo “HELLO WHO IS THIS” | tr 'A-Z' 'a-z' //⼤⼩写转换 | tr -d '0-9' //将数字去掉 tr -d
15. sort
16. bash的参数
$0 返回值
$1 第⼀个参数

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。