首页 > 技术文章 > shell

yun9678 2020-06-30 22:45 原文

一、SHELL技术

1shell特性                     子shell执行, ./ 或者bash ,当前shell执行   . 或者 source 

2shell变量

3shell条件测试

4shell数值运算

5 流控、循环

  if         条件判断

case 

for           循环

while

until

break        内置命令

continue

exit       

shift

array     数组   

function

#############################################################

与shell相关的几个文件,/etc/profile          /etc/bashrc      系统级  登录shell 执行          

     ~/.bash_profile          ~/.bashrc   用户级登录执行   

~/.bash_logount        ~/.bash_history 离开shell执行 

以上的与su     su-  有关目前还没理解       第六集

 

shell特点

(1)命令和文件的自动补齐,         这是因为rpm  -qa |grep        这个包bash-completion

(2)命令历史记忆功能   上下键  、!number       执行历史命令里的第几条命令、

!string   找到最近以字母开始的命令、 !$    上一个命令的最后一个参数、

!!、上一个命令(写脚本用的)         ctrl + R搜索历史命令

ctrl+D  与exit 一样           ctrl +A    +E     移动光标到前或者后

ctrl+K   往后删。ctrl +U    往前删       ctrl+s 锁ping   ctrl+Q 解锁

前后台作业控制  &、  nohup、ctrl+C 、 ctrl+Z  bg %1、  fg%1、kill %3、screen

 

ip addr |grep 'inet ' |grep eth0

ip addr|grep'inet '|tee test |grep eth0   覆盖

ip addr |grep 'inet'|tee -a test|grep eth0 -a  追加           tee管道

 

df |grep '/$'                                  磁盘里过滤跟下的

df |tee df.txt |grep '/$'

 

命令排序::::   三个符号;1、              ;          如cd;eject 把挂载的光驱给弹出来

;  不带逻辑判断

&&  带逻辑判断     前边的命令成功后执行后边的命令

||    带逻辑判断  前边的命令执行不成功,执行后边的命令

true  永远返回值为真     false   返回值为假   

 

command &             后台执行

command &>/dev/null    混合重定性(标准输出1,错误输出2)

command &&  command 2   命令排序,逻辑判断 

 

shell  通配符(元字符 )表示的不是本意

   *              匹配任意多个字符

  ?           匹配任意一个字符

【】匹配括号中任意一个字符  【abc】可能是a也可能是b 或者c  【^a-z】取反,不是a-z

()属于打开新的shell 执行

{}   集合  

\ 转义字符

echo -e "a\tb"  可以把T转义为tab键         -e 解释后边的特殊符号和颜色输出机制

带颜色输出################################################

echo -e "\e[1;31mThis is a red text."       打印-e   "\e [1;31-37 打印出来的颜色"

在最后边加上\e[0m    表示重置  31-37 指得是前景色       41-47 指的是背景色  

带颜色输出################################################

变量::

变量的命名:必须以字母或下滑线开头,不能以数字开头。

read -p “提示    ”           read  是从键盘读入

if [ $? -eq 0 ] ; then

        echo     “                ”

else   

       echo "                  " 

fi

上面的脚本的意思是如果$? =0 然后打印  “            ”不等于0执行else

fi  结束  

变量类型:

1、自定义变量(影响范围在当前shell)+export 转为环境变量

  定义变量:变量名=变量值  变量名必须以字母或下滑线开头,不能以数字开头区分大小写

 

 

2、环境变量  (影响范围在当前shell跟子shell)主要是系统定义的多       env能够显示所有的环境变量。

$1是位置变量

 

 4.预定义变量

$0     脚本名

$*     所有的参数

$@   所有的参数

$#     所有的个数  脚本执行有多少个参数

$$    当前进程的PID

$!     上一个后台进程的PID

$?    上一个命令的返回值 0表示成功

 

free -m |grep '^Mem:' |awk '{print $3}'   

这条命令的意思是  在查找内存信息中,取出 以Mem开头 的行。  然后打印第三列、

 

scale=2   保留小数点后面的两位,

awk 'BEGIN{print 1/2}'   计算1除以二

echo“pribt 5.0/2” |python     这支持小数点后边的小数。

 

 

 

 

 

 

 

 变量的替代

${变量名-新的变量值}      

 

 ${变量名:-新的变量值}两个的区别是一个会替换空值,一个不会替换空值

 

i++  和++i有什么区别!i++是自加, ++i是 

 

 

 

 shell脚本中的奇怪符号

break  跳出去

while 循环

true 永远为真

 

 

 

 条件测试  man test

(EXPRESSION )  表达式为真

!EXPRESSION    表达式不为真  false

 EXPRESSION  -a  EXPRESSION   都为真                  

EXPRESSION  -o  EXPRESSION  前边 或 后边为真(一个为真就可以)

-n  STRING   字符串长度为非0

-z                    长度为0

INTEGER -eq   INTEGER    整数比较   等于

                     -ge                大于或等于

                      -le    小于 等于        

                      -gt         大于

                    -lt        小于

推荐阅读