Linux04__Shell

一、Shell基础

1.1 Shell概述

  Shell是一个命令行解释器,介于内核和程序之间。(硬件>内核>Shell命令解释器>外层应用程序);

  Shell是解释执行的脚本语言,主要分为B shell和C shell,现主要用的是B shell。

1.2 Shell第一个脚本

vi hello.sh
''''''
#!/bin/bash
echo "hello world"
''''''

chmod 755 hello.sh
./hello.sh

1.3 Bash基本功能

#1 历史命令
history
!!  #重复执行上次的命令
!111  #重复执行历史中第111条命令
!vi  #重复执行历史中最后一条以vi开头的命令

#2 命令别名
alias ll='ls -l'
  •   bash快捷键

  •   输入输出重定向:

        

       

        

  •   多命令输入和管道符
  •  

    用法:./configure && make && make install

       ls /root/test && echo yes || echo no

  管道符:命令1的正确输出作为命令2的操作对象

   通配符 

1.4 Bash变量:自定义变量、环境变量、位置参数变量、预定义变量

#1 环境变量
export <变量名=值>  #设置变量
env  #查询变量
unset <变量名>  #删除变量

#PATH:系统查找命令的路径
echo $PATH
PATH="$PATH":/root/sh  #PATH变量叠加的方式来临时设置环境变量

# 接收键盘输入 read [选项] [变量名]
# 选项:
-p "提示信息",-n 字符数:只接受指定的字符数后就自动执行了 # 演示位置参数 vi test.sh '''''' #!/bin/bash read -p "Input your age: " age echo "$1 age is ${age}" ''''''
chmod 755 test.sh
./test.sh liming
[root@localhost ~]# ls
anaconda-ks.cfg  test.txt
[root@localhost ~]# echo $?   #0表示上次命令执行正确
0
[root@localhost ~]# lss
-bash: lss: 未找到命令
[root@localhost ~]# echo $?
127
  •  变量运算:推荐用“$((运算式))”或“$[运算式]”
  •  运算符:

 1.5 环境变量配置文件

#系统默认环境变量配置文件有:

#所有用户生效

/etc/profile

/etc/profile.d/*.sh

/etc/bashrc

#对应用户生效

~/.bash_profile

~/.bashrc

source <配置文件>  #使配置文件生效

. 配置文件  #同上

set  #查询系统默认变量

二、Shell编程

2.1 正则和通配符

  • 正则是在文件中匹配符合条件的字符串,是包含匹配(grepawksed支持正则),类似python中re.search用法;
  • 通配符是匹配符合条件的文件名,是完全匹配(lsfindcp不支持正则,只能使用通配符进行匹配),类似python中re.march用法

 2.2 字符截取命令

#1 cut <文件名>
# 选项: -f 列号:提取第几列;-d 分隔符:按照指定分隔符分割符(默认为制表符)
cut -f 2 test.txt
cut -f 2,4 test.txt
cut -d ":" -f 3 /etc/passwd
#cut的短板:不能很好识别以空格分隔的内容,这种更适合用awk命令

#插入一个命令:printf '输出类型 输出格式' <输出内容>
#   输出类型: %ns:输出n个字符;  %ni:输出n个整数;  %m.nf:浮点数
#  一般awk配合printf使用

#2 awk '条件1 {动作1} 条件2 {动作2}' <文件名>
awk '{FS=":"} {print $1 "	" $3}' /etc/passwd  # {FS=":"}指定分隔符;  第一行没有分割
awk 'BEGIN{FS=":"} {print $1 "	" $3}' /etc/passwd  #BEGIN分割第一行

#3 sed [选项] '动作' <文件名> #用来对数据选取、替换、删除、新增等操作
# 选项: -n:只输出处理行; -e:允许输入数据应用多条SED命令; -i:直接修改数据文件
# 动作: a追加,c行替换,i插入,d删除,p打印,s字符替换
df -h | sed -n '2p' #只查看第二行
原文地址:https://www.cnblogs.com/koafan-zou/p/12292178.html