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选项删除光标位置至行尾
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/96809