学习笔记(7)

1.命令执行错误,后续命令继续执行,语法错误后续命令将不再执行

2.bash -n 只检查语法错误,不检查命令错误

3.使用双引号可以保留文本格式 name=`cat /etc/fstab`,echo "$name"

4.name1=magename2=wang name3=$name1 echo $name3  name1=zhangsi echo $name3

5.type if 可以查看是否为关键字

6.普通变量只在当前会话有效,在子进程中无效,在其他终端也无效,子shell定义的变量不影响父shell定义的同名变量

7.echo $$ 查看当前进程的进程号 echo $PPID 查看父进程编号

8.pstree -p 查看进程树

9.子进程不能修改的全局变量

10.export 显示系统的环境变量,也可以使用declare 来显示环境变量,declare -x name 创建环境变量,env也可以显示环境变量

11.declare -x name=xixi 也可以使用declare -x 来显示系统的环境变量

12.系统自带的环境变量是通过读取配置文件读入的,所以自定义变量(包括环境变量)可以通过退出当前会话来取消,也可以通过unset取消

13.set 显示系统的所有变量,declare 也为显示系统的所有的变量(环境变量和普通变量)

14.脚本中定义的变量要记得unset变量,以便系统回收占用的内存

15.lscpu显示cpu信息

16.查看硬盘大小lsblk ,df 只能查询分区大小

17.$PATH 中的/root/bin 可以作为脚本的存放目录,不需要使用路径,此目录需要手动创建

18.echo -e "\e[1:31m start backup ... \e[0m" 输出颜色字体, echo -e "\e[1;31m start \e[0m"

#!/bin/bash

color_num=$[RANDOM%7+31]

echo "color_number :$color_num"

echo -e "\e[1;${color_num}mCOLOR \e[0m"

19.echo $SHLVL  查看shell嵌套深度,可用来查看当前shell的层数 (LVL: level)

20.echo $_ 前一个命令的最后一个字符串,可以使用command $_ 来执行上一条命令的最后一个参数

21.只读变量不能修改不能删除,生命期为进程的生命期,退出会话环境变量取消

22.declare -r 显示系统的只读变量,declare -r name=zl(readonly name=zl)

23.防止修改系统环境可以使用(umask 666; touch /data/f1),()是开启了一个子shell,不影响当前系统的umask值,还可以保留原目录来执行

  (cd /data; rm -rf /data/*) 执行完成之后路径不切换

24.man bash 中可以查看()的使用说明,注意在bash中搜索$的时候需要转义符号\

25.{ name=mage; echo $name; } 在当前shell环境中执行,注意空格和分号,()里面的命令可以不使用空格,使用{}一定要有空格,如 { name=mge; echo $name }

26.x=1;echo $$;(echo $$;echo $x;x=2;echo $x);echo $x   

27.多脚本传递参数,并打印第一个参数 $*,$@ 区别,只有在加""号时有区别

test2.sh

#!/bin/bash

echo "arg1 is $1"

test.sh

#!/bin/bash

echo "============================="

echo "arg1 is $1, all args is $*"

echo "============================="


echo "+++++++++++++++++++++++++++++"

/root/bin/test2.sh "$@"

echo "+++++++++++++++++++++++++++++"


# ./test.sh a b c

28.set -- 清空所有位置变量,脚本执行完成以后清空变量以便系统回收内存

29.为执行的脚本创建软连接,可以通过$0判断来执行不同的功能,系统中给出的示例: # ll /usr/sbin/pidof

30.vim 编辑器使用 V 来复制行,Ctrl + v 来复制列

31.shift 左移位置参数, shift num  可以指定左移多少位

32.脚本的执行是否成功由最后一条命令来决定的,如果是语法错误,后续的命令无法执行,即便正确也是返回非0

33.exit 可以指定退出码,使用echo $? 查看返回

34.执行的shell脚本是在子进程中执行的,可以使用pstree来查看

35.let z=x+y(let z=$x+$y),$[],declare -i算数运算中里面的变量可以不用加$

36.COLOR=$[RANDOM%7+31] ;color 颜色字体补充

37.expr 是命令 expr 1+2 错误,正确 expr 1 + 2, expr 3 \* 2 乘法符号需要使用\转义

38.a=$[a^b]; b=$[a^b];a=$[a^b]; echo $a $b  a、b互换

39.help test 可以查看条件判断的种类,也是[ ] 的帮助说明,因为test 和[] 是等价的

40.[]中的变量建议使用"" 引用,防止一个变量为空另一个变量非空导致报错

41.[ $# -ne 2 ] && echo "******" && exit 1 最后一个&& 说明

42.=~ 使用扩展的表达式 并且使用[[]], !取非 [[ $filename =~ .+\.sh ]]

43.-w 判断权限看的是实际权限不是文件的权限设置,针对与root的(ll 查看的)  [ -w /etc/shadow ]

44.使用()或者{}在比较中可以改变优先级 false ||{ cmd1; cmd2; },() 开启 了一个子shell,{}不开启子shell,退出脚本本身要使用{}

45.[ ! $# -eq 2 ] 注意!的位置

46.脚本中只有在使用正则表达式的时候,使用[[]] 来做判断

47.linux操作系统退格键不好用,可以安装下readline库# yum install readline-devel.*

48.ls -d 选项查看当前目录的所有文件时不会递归目录下面的子文件夹,如: ls -d /etc/*/ 显示/etc 下面所有的文件夹,ls -d /etc/* 显示目录下面所有的文件夹和文件

49.ls 中的A选项排除.和..可以结合grep来搜索出当前目录下的子目录或是文件有多少(包括隐藏文件),如: ls -Al /etc/ |grep '^d'|wc -l

50.df -i 查看磁盘分区的inode利用率

51.if [[ $key =~ [Yy][Ee][Ss] ]] 注意在使用正则表达式的时候不要使用双引号如 $key =~ "[Yy][Ee][Ss]",这种会报错

52.扫描当前新添加的磁盘并识别: echo '- - -' >/sys/class/scsi_host/host0/scan

53.-a File(-e File): 存在性测试,存在为真,否则为假

53.-h File(-L File): 存在且为符号链接文件

54.-s File: 是否存在且非空

55.vi 编辑器可以将指定的行保存至另外一个文件 :3,8w /root/test1111, 将指定的第三行至第8行保存至文件test1111中

   也可以读入命令输出, :r ls 将ls的输出输出至当前vi打开的编辑器中,使用:r /etc/fstab 读入/etc/fstab 中的文件内容至当前的编辑器中

56.vim编辑器中ctrl + d向屏幕的尾部翻半屏 ctrl + u 向屏幕的首部翻半屏

57.vim编辑器中使用D选项删除光标位置至行尾


猜你喜欢

转载自blog.51cto.com/9980200/2104919