linnux--shell

一.执行shell
   方法一:chmod +x uad.sh
               /uad.sh
   方法二:sh usd.sh
   方法三:source uad.sh
二.shell命令的组合运用
   管道操作:将一端的命令输出交给另一端的命令处理
      格式:命令1 | 命令2
           
   重定向操作:改变执行命令时的默认输入,输出

类型 操作符          用途
重定向输入 从指定文件读取数据,而不是键盘输入
重定向输出  >, >> 将输出结果覆盖追加到指定文件
标准错误输出 2>,2>>  将错误信息覆盖追加到指定文件
混合输出 &>,&>> 将标准输出和错误信息覆盖,添加到指定文件

  逻辑分隔:处理多条命令之间的逻辑关系

    逻辑与:&

         逻辑或:||

     顺序执行:;
三:使用变量
    变量基本操作
     定义及赋值: 变量名=变量值
     引用变量:$变量名,${变量名}
   双引号/单引号/反撇号

双引号

允许引用,转义
单引号 禁止引用,转义
反撇号,或者 &()

以命令输出进行替换


   常见的环境变量:用来记录/设置运行环境参数

    系统赋值:USER, LONGNAME,HOME,SHELL ... 

      用用户操作:PATH,LANG,CLASSPATH ...


   其他特殊变量

    由系统或脚本操控不可直接赋值

    $?:前一条命令的状态值,0为正常,非0为异常

    $0:脚本自身的程序名

    $1-$9:第1到第9个位置参数

    $*:命令行的所有位置参数的内容

    $#:命令行的位置参数个数

四.数值运算及处理

  整数运算操作

    使用expr命令,计算表达式:expr 数值1 操作符 数值2

                引用变量的情况 x=45; y=21; expr $x - $y

    使用$[]表达式,算式替换:$[数值1 操作符 数值2]

      引用变量的情况 x=45; y=21; echo $[x - y]   乘法不需要转义

  几个数值处理技巧

    变量的递更处理:let 变量名++   let变量名-

    使用随机数:RANDOM

      例:echo $RANDOM;   echo $[RANDOM%100]

    生成数字序列:seq 首数 末数  ,seq 首数 增量 末数

  小数运算操作

    将表达式给bc命令处理:echo "45.67-21.05" | bc               echo  "scale=4; 10/3" | bc (通过scale=n制约小数位数)

五.字符串操作

  子串截取操作

    路径分割:dirname命令,base命令

    expr命令:expr substr $Var1 起始位置 截取长度

    ${}表达式:${Var1:起始位置:截取长度} 编号从零开始,从开始位置截取的话,起始位置可以省略不写

  字符串替换

    ${Var1/old/new}  只替换第一个old

    ${Var//old/new}   替换所有old

  使用随机字符串

    随机字符==》ASC11  

      head -1 /dev/urandom | md5sum

    使用cut切割字符串

      echo  $Var1 | cut -b 起始位置-结束位置  位置为首,尾可省略

六.条件测试

  测试操作规范

    测试的本质是一条操作命令,根据 $? 返回值来判断条件是否成立

    格式:test 条件表达式

       [条件表达式]

                         [条件表达式] && echo YES      测试成功则会输出YES,测试失败就不会输出东西

  文件状态的检测

    存在及识别

      -e:是否存在    -d:是否为目录     -f:是否为文件     

    权限的检测

      -r:是否有读取权限     -w:是否有写的权限         -x:是否有可执行的权限

  整数值比较,字符串匹配

      -eq:等于(equal)   -ne:不等于(not equal)  -gt:大于(great than)  -lt:小于(less than) -ge:大于或等于(great or equal) -le:小于或等于(less or equal)

      当前服务器登陆用户数:who |wc -1

      获取当前用户: $USER

      =    两个字符串相同    !=   两个字符串不同

七.使用if判断结构

  程序流控制

  单分支/双分支的if应用

if    条件测试1

    then 命令序列1

elif   条件测试2

        then 命令序列2

else

        命令序列n

fi(结束判断)

  

  多重分支的if应用

八.for循环

  for语句结构

for 变量 in 取值列表
 do
       命令序列
done

  

批量加用户,用户列表文件users.txt,一行一个。初始口令设置为123456,首次登录后必须修改
cat uad.sh
#! bin/bash
for i in ${cat /root/users.txt}
do
	useradd $i
	echo "123456" | passwd -stdin $i
	chage -d 0 $i
done

九.case语句

case 变量值 in
模式1)
	命令序列1
	;;
模式2)
	命令序列2
	;;
*)
	默认命令序列
esac

 

# cat hitkey.sh
#! bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in 
[a-z] [A-Z])
	echo "您输入的是字母。"
	;;
[0-9])
	echo "您输入的是数字。"
	;;
*)
	echo "您输入的是空格,功能键,或其他控制字符。"
esac

十.awk文本处理

非交互式处理方式
重定向,管道,命令替换
head,more,cut,tr
grep,awk,sed

awk格式:awk '模式{操作}' 文件1 文件2 ...
      awk 'NR==1{print}' /etc/hosts   输出指定目录下第一行
      awk 'NR==1,NR==3{print}' test.txt 输出第1到第3行
           awk '(NR==1)||(NR==3){print}' test.txt  输出第1行和第3行
 
正则表达式:awk '/2/{print}'test.txt 输出含有字符2的行
           awk '/bash$/{print}'test.txt 输出yibash结尾的行
指定分隔,指定输出字段
     awk 'NR==2,NR==3{print $1,$3}' test.txt 输出第二行到第三行第一字段和第三字段
     awk -F. '$5=="benet"{print $0}' test.txt 输出以.分隔 且第五字段为benet的行
 
常见的内置变量:
   NR:当前处理行的序数(行号)
   FS:字段分隔,缺省为空格或Tab位
   $n:当前行的第n个字段
   $0:当前行的所有文本内容

十一.sed基本命令格式
 格式:sed ’编辑指令‘文件1 文件2...
       sed -n 文件1 文件2...
       sed -i 文件1 文件2... 

十二.bash的基本功能
 1.命令别名与快捷键
  alias 查看别名
                                  alias 别名=‘原名’
  unalias 别名 :删除别名
  ctrl+c 强制终止当前命令
  ctrl+l 清屏
  ctrl+a 光标移到命令行首
  ctrl+e 光标移到命令行尾
  ctrl+u 从光标所在位置删除到行首
  ctrl+z 把命令放到后台
  ctrl+r 在历史命令中搜素
 2.历史命令
  history [选项] [历史命令保存文件]
                                  选项:-c 清空历史命令
              -w 把缓存中的历史命令写入历史命令保存文件/.bash_history
  !n  :重新执行第n条命令
  !! :重新执行上一条命令
  !字符串 :重新执行最后一条以该字符串开头的命令
 3.输出重定向
  wc [选项] [文件名]
                   选项:-c统计字节数
                                               -w统计单词数
                                               -l统计行数        
 4.多命令顺序执行

多命令执行符 格式 作用
;

命令1 ; 命令2

多个命令顺序执行,命令1和命令2之间没有逻辑联系
&& 命令1 && 命令2 命令1执行正确命令2才执行,命令1执行不正确,则命令2不执行

||

命令1 || 命令2 命令1执行不正确命令2才执行,命令1执行正确,则命令2不执行

管道符

命令1 | 命令2 命令1的正确输出作为命令2的操作对象

                                                  more:能查看文件内容但不能查看命令执行结果

              netstat -an 查看linnux中所有的网络连接

 5.shell中特殊符号

原文地址:https://www.cnblogs.com/yanweichen/p/9063981.html