您的当前位置:首页正文

shell 命令集

2024-11-07 来源:个人技术集锦

shell 常用知识点
---------------------------------------

eg:
echo 123 > sed.txt
sed -i "s/123/456/" sed.txt
cat sed.txt
droid05@Exdroid:~/myworkspace/sed$ cat sed.txt
456

sed -n '1,np' <file>

eg:
echo 123456 > sed.txt
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. 判断语句

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}
若变量已赋值的话,正常替换.否则将消息message送到标准错误输出(若此替换出现在Shell程序中,那么该程序将终止运行)
(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 lastmod.tar.gz `find . -mtime -1 -type f -print`

7. grep

8. awk <http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html>

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
40:黑
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' //大小写转换
cat file.txt | tr -d '0-9' //将数字去掉 tr -d

15. sort


16. bash的参数
$0 返回值
$1 第一个参数
$2 第二个参数
$@ 被扩展为 "$1" "$2" "$3" (用得最多)
$* 被扩展为 "$1c$2c$3"
$#表示参数个数

举例说:
脚本名称叫test.sh 入参三个: 1 2 3
运行test.sh 1 2 3后
$*为"1 2 3"(一起被引号包住)
$@为"1" "2" "3"(分别被包住)
$#为3(参数数量)


$* $@ "$@" "$1" "$2" "$3"
"$*" "$1 $2 $3"

17.linux shell之查找命令 <http://www.jbxue.com/LINUXjishu/21304.html>

find
locate
whereis
which
type

18. cut

echo $PATH | cut -d: -f 3,5 //取出第3行和第5行
last | cut -d ' ' -f 1
last | cut -c 9-15
last | cut -c 9-
last | cut -d " " -f 1 | sort | uniq
last | cut -d " " -f 1 | sort | uniq -c

rename shell
eg:
#!/bin/bash

count=1;
for item in Chapter*
do
new=c${item##* }
mv "$item" "$new" 2>/dev/null
if [ $? -eq 0 ];then
echo "Renaming $img to $new"
let count++
fi
done

shell 调试
最简单的调试命令当然是使用echo命令。您可以使用echo在任何怀疑出错的地方打印任何变量值。
这也是绝大多数的shell程序员要花费80%的时间来调试程序的原因。Shell程序的好处在于不需要重新编译,插入一个echo命令也不需要多少时间。

  shell也有一个真实的调试模式。如果在脚本"strangescript" 中有错误,您可以这样来进行调试:
sh -x strangescript
  这将执行该脚本并显示所有变量的值。
  
shell还有一个不需要执行脚本只是检查语法的模式。可以这样使用:
   sh -n your_script
  
这将返回所有语法错误。

shell 返回值

全志命令
------------------------------------
godir
mm
mmm
croot
cdeives
cout
cgrep
resgrep
jgrep

批量删除某个文件
find . -name 'xxx' -exec rm -r {} +

转载于:https://www.cnblogs.com/llfang/p/4309538.html

显示全文