- 当运行一个shell时,linux会创建一个新的bash,使用里面的环境变量都用的是全局的(export),如果事先AAA=aaa,在这个shell脚本里则打印不出AAA来,如果实现export AAA则可以,这就是环境变量和普通变量区别
- 双引号和单引号区别:
echo "a b $USER"
得到a b root
,而echo 'a b $USER'
得到a b $USER
。获取变量值的时候就使用双引号,如果是在脚本中要编写一个新的脚本,同时这个新的脚本中还需要包含变量,你就可以选择使用单引号。双引号是脱去空格的意义。反引号的作用是设置系统命令输出到变量,即执行反引号的内容得到的输出赋给变量. - [ ] 实际上是bash 中 test 命令的简写。即所有的 [ expr ] 等于 test expr
- $#代表传入几个参数;
$?代表上面执行的命令返回值,0代表成功;
$$代表进程的ID号,即PID
\$[]代表要进行算术运算。 - read用法:
read -p "please input your name:" AAA
printf "$AAA is good"
从键盘输入的字符复制给AAA,然后打印 - seq 1 100 产生1到100之间的整数
- 查看当前所有进程:ps -aux
- 查看端口号为8000的网络状态:netstat -an | grep 8000
- 杀掉某个进程:killall xxx(名称)或者kill xxx(进程号)
- 同步/etc/profile下的环境变量:source /etc/profile
同步后profile里面的变量可以全局使用,函数也可以直接在命令行中使用,例如mm就是这样产生的 - 清屏:Ctrl + L
- 调试b.sh脚本程序:bash -vx ./b.sh
输入输出重定向:
1). >代表把正确的消息输入重定向到一个文件中去,会先清空之前的
2). 2>代表把错误的消息输入重定向到一个文件中去,会先清空之前的
3). find / -name shrek > /tmp/findfile 2>&1 代表把输出正确的消息重定向到/tmp/findfile中,将错误消息也重定向到findfile中
4). find / -name shrek &> /tmp/findfile 代表把正确或者错误的消息都重定向到/tmp/findfile中。
5). 查找/etc下有多少个目录:ls /etc/ -l | grep ‘^d’ |wc -l
6). ls |tee bbb 将显示的内容输入到bbb中去
7). tr ‘“a-m”’ ‘“N-Z”’ < /etc/pam.conf >abc.txt 代表将pam.conf中的a-m变成N-Z然后写到abc.txt中var:−string和 {var:=string}:若变量var为空,则用在命令行中用string来替换 var:−string,否则变量var不为空时,则用变量var的值来替换 {var:-string};对于 var:=string的替换规则和 {var:-string}是一样的,所不同之处是 var:=string若var为空时,用string替换 {var:=string}的同时,把string赋给变量var: ${var:=string}很常用的一种用法是,判断某个变量是否赋值,没有的话则给它赋上一个默认值。
记忆方法:#是去掉左边(在鉴盘上#在$之左边)
%是去掉右边(在鉴盘上%在$之右边)
单一符号是最小匹配﹔两个符号是最大匹配。
0
1 [root@root shell]# var=testcase
02 [root@root shell]# echo $var
03 testcase
04 [root@root shell]# echo ${var%s*e} 从最右边删除最短匹配
05 testca
06 [root@root shell]# echo $var
07 testcase
08 [root@root shell]# echo ${var%%s*e} 从最右边删除最长匹配
09 te
10 [root@root shell]# echo $var 变量没有改变
11 testcase
12 [root@root shell]# echo ${var#?e} 从最左边删除最短匹配
13 stcase
14 [root@root shell]# echo $var
15 testcase
16 [root@root shell]# echo ${var#*e} 从最左边删除最短匹配
17 stcase
18 [root@root shell]# echo $var
19 testcase
20 [root@root shell]# echo ${var##*e} 从最左边删除最长匹配,即删除所有
21 [root@root shell]# echo $var
22 testcase
23 [root@root shell]# echo ${var##*s} 从最左边删除最长匹配
24 e
25 [root@root shell]# echo $var
26 testcase
27 [root@root shell]# echo ${var#test} 删除test
28 case
29 [root@root shell]# echo $var
30 testcase
31 [root@root shell]# echo ${var#tests} 没有匹配
32 testcasecut用法:
cat /etc/passwd | cut -d: -f2 显示passwd下的每行中以:为分隔符截成几段,显示第二段的内容
who | cut -b 1-5 显示第1到第5个字符(从1开始不是0)${#var} 可计算出变量值的长度
export luyao=goodman
echo ${luyao: -2} 显示 an
echo ${luyao: 2} 显示odman
echo ${variable//pattern/replacement} 将变量variable的pattern部分替换成replacement
文件查找:
1) which/whereis:查找命令所在的路径。
2) locate:类似"search everything"的查找,查找数据库中的数据,可以使用updatedb来更新本地数据库.无法查找刚刚添加的文件。
3) find / -name "\*newfile*" -ls :查找带有newfile的所有文件以ls形式列出来.
4) find /home -name "*newfile*" -exec rm {} \; :查找带有newfile的所有文件放入{}中然后执行rm删除。
5)find /home -user shrek -a -group shrek -ls :查找home目录下用户是shrek并且所属组是shrek的文件显示出来。-a代表是并且,-o是或者.
6) grep avcon -R -l /device :在device目录下递归查找含有avcon字符串的文件,只显示文件名出来。
7) grep -A5 -B5 shrek /etc/pwd :在pwd文件中查找shrek字符串,并显示上面5行(-A指定)和下面5行(-B指定)
正则表达式
1)-r启用正则表达式,然后用''框起来。
2) tail -f /vat/log :实时检测log文件
tail -n /var/log :看log文件的末尾n行
3) cut -d: -f1 /etc/pwd :显示pwd下每行以“:”为分隔符,且显示第一列。注:分隔符必须是单字符
4) sort -n -k 2 -t ‘:’ facebook.txt
apple:10:2.5
orange:20:3.4
banana:30:5.5
pear:90:2.3
-n代表以数字进行排序(number),不加以ASCII码排序,-k指定列数,-t指定以什么为分隔符
5) head -n a.txt:显示a文件的头n行