shell编程及小命令

1. ping 10.1.252.25d2 -c1 -w1 &> /dev/null && echo "The host is up" || echo "The host is down"

2. 在vim命令中, p或则P可以实现复制。

    p: 复制到下一行

    P: 复制到上一行

3. echo 如何不自动转行?

      echo -n "xxxxx"

      echo -e"xxxxxxx\c"

4. echo -e 选项可以实现字体颜色。

5. uname -m   //  硬件平台架构  

   X86表示CPU指令集方式

   64位表示64位操作系统

6. bash -n 脚本  //  可用来调试脚本,检测脚本中的语法结构, 只是检测语法结构, 具体命令不检查。

   bash -x 脚本   //  调试执行脚本

7. PATH的全局配置文件,/etc/profile中, 对所有用户都生效。

   每个用户都有自己的配置文件~/.profile, 这种文件只对当前系统有效。

8. 在运行窗口或则是dos窗口下, 输入calc可打开计算机功能。

9. Windows寻找命令的话,是先找当前目录下, 有没有这个命令, 再去path变量下找。 

   Linux下则不是这样, 不会在当前目录下找, 直接就在path变量下找。

10. 命令的优先级:

别名<内部命令<hash<外部命令

11. 在运行窗口或则是dos界面下, 输入notepad可以打开记事本。

12. set 命令可以查看系统所有的变量, 包括你自己定义的变量。

    unset 命令 可以撤销变量。

    echo $A  输出一个没有变量的话, 这样系统会创建这个变量, 但是这个变量为空。

13. 编程语言不仅可分为面向对象和面向过程, 还可以分为强类型和弱类型

    强类型:定义变量时必须指定类型、参与运算必须符合类型要求,调用未申明变量会产生错误。

    弱类型: 无需指定类型, 默认均为字符型; 参与运算会自动进行隐式类型转化,变量无需事先定义可直接使用。

14. 命名规则: 驼峰原则   小驼峰(首字母小写)    大驼峰(首字母大写)

15.在系统中如果自己定义的变量使用完之后, 尽量通过unset释放这个变量。如果这个变量自己无法释放的话,会占用内存空间。

理论上, 一个shell执行完之后, shell脚本中的变量空间会被释放。 则bash中是无法使用的。

16. sleep #   // 睡眠#秒

17. pstree tree  两个命令都是以树型结果显示, pstree 以树形结构显示进程

    tree  则以树形结果显示系统文件结构。

18. `命令`  和  $(命令)  效果是一样的。

19. 引用变量的时候, 可以使用$变量名  $(变量名)

    比如当$10  想要引用第10个参数的时候, 必须使用$(10)

    $(10)

    $10   ==  ($1)0

20. 内存   free    cat /proc/meminfo

    磁盘   cat /proc/partitions   fdisk -l  lsblk

    cpu   lscpu   

21. grep 引用扩展正则表达式时需要使用-E参数, 而sed使用扩展正则表达式的话, 使用-r选项。

22. sort的使用, 当sort后面不加参数的话,表示以先按名字首字母ANSCII码排序,首字母一样的话,再按下一个字母的ANSCII码排序。

-n  参数  //  将整个字符串看成整体, 以小到大排序。

23. uniq命令用来查看重复的记录。

    uniq -c    //  用来查看所有的重复记录

    uniq -c与sort排序一起搭配使用:

    sort | uniq -c 

24. export 变量名  

    declare -x  变量名

//  不仅可以定义变量,还可以将原有的局部变量转化为坏境变量。

25. export 和  env  都是可以查看坏境变量的。

26.cp命令:

cp 单文件  目录

      cp 多个文件  目录

      cp -r 目录 文件   ERROR

      cp -r 目录  目录  RIGHT   // 这种方式是将整个目录都拷贝到目录下

      cp -a 目录 目录  ===  cp -r 目录/* 目录   // 将目录下的文件拷贝到目录下,而不是将整个目录拷贝过去

27. 在shell编程中, 常量又被称为只读变量。

    如何定义常量、只读变量:

  readonly 变量名=变量值

declare -r 变量名=变量值

28. $*  $@  表示全部的参数。 而$*是将所有的参数都整合为一个字符串,而$@所有的参数任是独立的个体

文件 test1.sh

#!/bin/bash

#

/root/shell/f1.sh "$*"  // 必须用""双引号括起来

echo "———————"

/root/shell/f1.sh "$@"   // 必须用""括起来

文件f1.sh

#!/bin/bash

#

echo "1:$1"

echo "2:$2"

echo "3:$3"

echo "4:$#"

echo "5:$*"

echo "6:$@"

    

结果:

[root@centos6 shell]# ./test1.sh 1 2  3 4

1:1

2:2

3:3

4:4

5:1 2 3 4

6:1 2 3 4

———————

1:1

2:2

3:3

4:4

5:1 2 3 4

6:1 2 3 4

29. basename $0 会自动读取可执行文件名

30. 使用sed编辑的文档是不可以直接重定向到>  >>本身编辑的文档, 这样操作的结果很严重, 文件马上变空了。

31. shell 编程中, 运算的几种方法:

1>. let 运算表达式

       2>. 变量=$[运算表达式]

       3>.  ((运算表达式))  // 支持C语言的表达式

4>. expr  使用命令进行运算

expr 符号1 运算符 符号2 

*  需要转译

5>. 申明变量为整形, declare -i 变量名

   该变量在bash中可以直接运算。

      6>. bc(计算器支持标准的输入)

标准输入 | bc  将结算结果赋给变量值

比如:

[root@centos6 shell]# echo `seq 1 100 | tr "\n" "+" | sed -r 's@(.*)\+$@\1@'`  |bc

5050

32. 产生随机数:

在Linux系统下面, 有一个RANDOM变量, 这个变量不是坏境变量, 是个局部变量。每输出一次这个这个变量, 这个变量就会变一次。

echo $[$RANDOM%80]  对80求余,得到的是0–79

33. a++:  先引用再递增

    ++a:  先递增后引用

a=2   a++ 本身是2   ++a  则本身是3  这就是两者的区别

34. 短路与&&    短路或||

    实现条件判断的方式: 1>. &&  ||

2>. if 

3>. case

35. 聚集命令, 几个命令用  ; (分号)隔开。

36.在每条执行的命令都有一个返回的结果, 0表示命令执行结果, 1-255表示执行失败。 

37. 在shell编程中, 可以自己定义返回的结果, 根据返回的不同结果做不同的操作。

38. 在linux系统,ping 命令一旦执行, 会一直执行下去。

    —W timeout  延迟  等待时间, 一旦在指定时间内, 对方没有回应, 表示ping 不同

    -c count 表示我要ping的次数。

Windows系统系ping命令:

ping x.x.x.x -t  不停的ping

ping -n 10 x.x.x.x  ping10次

39. $? 只会保留最后一次命令的执行结果。

40. 测试命令:

test …

[] 两边必须有空格

[[]]  两边必须有空格

41. true false 其实是bash中的指令, true返回1  , false返回0, 这两个命令在死循环中非常有用。

42. grep -q === grep "xxx" file &> /dev/null

43.测试类型:

1>. 数字测试:  //  注意这些前面必须是有-的。

-gt : 是否大于

-ge : 

2>. 字符串测试:

3>. 文件测试

4>. 组合测试:

第一种方式: ||  &&  !

第二种方式:   -a(并且)  -o(或则)   !

 -a  and   -o or

 

44. 用 ==  !=  两边尽量要用空格

45. 判断一个字符串变量为空的话, [ -n $A ] 是不行的, 但是[[ -n $A ]]是可以的。

[[]]  更具有通用性。  []有时候是不能使用的。

46. test xxx 或则  []  或则  [[  ]]表示的都是就是一个结果, 根据这个我们去做相对应的操作。 

47. 当我们只是记得一些文件信息, 而忘了是哪个文件的时候, 我们可以使用grep正则表达式来寻找配置文件

比如: grep -R "^root.*" /etc/

50. 自己默认创建系统用户的时候,默认是可以登录的。 其实还是/etc/default/userdd文件

51. 只要在/etc/文件夹下创建nologin文件的话, 非root用户是不可以登录的。 通过su命令的话, 通过su到这些普通用户的。

52. read 命令, 编写脚本, 可以启动和用户更好的交互功能。

[root@centos6 ~]# read -p "please input your name:" name

please input your name:meng

[root@centos6 ~]# echo $name

meng

read 变量  

read -p "提示信息" 变量

    

    

原创文章,作者:458813466,如若转载,请注明出处:http://www.178linux.com/33406