Linux系列七-bash基础

一、变量的定义

1、等号两边不能接空格
2、变量名称只能是英文开头,后面可以接数字和英文
3、变量内容使用""括起来时,其内的特殊字符如$保持原有特性
4、变量内容使用''括起时,期内的内容均为一般字符
5、可用转义字符\将特殊字符转义一般符号
6、命令中需要其他命令提供的信息,$(命令)。如定义version=$(uname -r)
7、为某个变量增加内容时,使用$变量名称累加。如设置PATH=$PATH:/home/admin/gradle-3.3/bin
8、export使变量变为环境变量
9、通常大写为系统默认变量,小写为自定义变量
10、取消变量设置:unset 变量名
符合规则的:
param=test
param="test t1"
param='t'
错误方式
param = test
param=test test
1param=test

二、环境变量

 $ : 除了可以获取定义的变量外,其本身也是一个环境变量,代表的是目前这个shell的线程PID
 ? : 上个执行命令的回传码,执行某些命令时,都会回传一个执行后的代码。一般成功执行回传0,非0就是执行过程发生错误

三、数据流重定向

标准输入 stdin:代码0,使用<<<
标准输出 stdout:代码1 使用>>>
错误输出stderr: 代码2 使用 2>2>>
/dev/null : 垃圾桶黑洞设备,可以吃掉任何导向这个设备的信息。如想将错误信息忽略 find /rot -name s 2> /dev/null,此时错误信息不会在屏幕显示
正确与错误信息输入到同一个文件:
    操作命令 > 文件 2>&1 或者 操作命令 &> 文件
例:
rock:test cc$ ll > rootfile 
rock:test cc$ cat rootfile 
total 32
drwxr-xr-x   7 cc  staff   224  7 17 23:00 ./
drwxr-xr-x  12 cc  staff   384  6 20 07:40 ../
使用ll并未在屏幕上显示信息,因为使用> 此时ll的结果被输入到rootfile中,若rootfile不存在,则创建,若存在则清空。如果不想清空而是继续追加 则使用 >>

四、特殊字符

cmd;cmd : 无相关性的连续命令执行。在命令间使用;分割,分号前的命令执行完会接着执行后面的命令
$? : 获取命令回传码

五、管道命令pipe (|)

管道命令仅会处理stdout
管道命令必须能够接收来自前一个命令的数据成为stdin继续处理

这里写图片描述
1、选取命令 cut,grep
作用:分析一行数据,取出需要的数据

cut
命令:cut -d'分隔字符' -f index[,index]
例:以:作为分割符,取指定index的
rock:test cc$ echo $PATH
/Library/Frameworks/Python.framework/Versions/3.6/bin:/Users/cc/maven/apache-maven-3.3.9/bin:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/bin:/Users/cc/app/phantomjs/bin
rock:test cc$ echo $PATH | cut -d':' -f 1
/Library/Frameworks/Python.framework/Versions/3.6/bin
rock:test cc$ echo $PATH | cut -d':' -f 1,3
/Library/Frameworks/Python.framework/Versions/3.6/bin:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/bin 
命令:cut -c 截取范围
例:
rock:test cc$ echo $PATH | cut -c 1-
/Library/Frameworks/Python.framework/Versions/3.6/bin
rock:test cc$ echo $PATH | cut -c 1-5
/Libr
rock:test cc$ echo $PATH | cut -c -5
/Libr
grep [-acinv] [--color=auto] '查找字符串' filename
    -a 将binary文件以text文件的方式查找数据
    -c 计算找到'查找字符串'的此时
    -i 忽略大小写
    -n 输出行号
    -v 反向选择,即显示出不符合条件的
    --color=auto 加颜色

这里写图片描述
2、排序命令sort、wc、uniq

sort 根据不同的数据类型排序
命令:sort [-fbMnrtuk] [file or stdin]
    -f 忽略大小写
    -b 忽略最前面的空格符
    -M 以月份的名字排序
    -n 使用纯数字排序
    -r 反向排序
    -u uniqe相同的数据只出现一行
    -t 分隔符,默认 [tab]
    -k 以哪个index排序
例子:
    rock:test cc$ cat rootfile | sort 
    -rw-r--r--   1 cc  staff     0  7 17 08:08 bashtest.sh
    -rw-r--r--   1 cc  staff     0  7 18 22:06 rootfile
    -rw-r--r--   1 cc  staff     8  7 17 22:59 test
    -rw-r--r--   1 cc  staff   262  7 17 23:00 test1
    -----------------------------------
    rock:test cc$ cat rootfile | sort -t ':' -k 1
    -rw-r--r--   1 cc  staff     0  7 17 08:08 bashtest.sh
    -rw-r--r--   1 cc  staff     0  7 18 22:06 rootfile
    -rw-r--r--   1 cc  staff     8  7 17 22:59 test
    -rw-r--r--   1 cc  staff   262  7 17 23:00 test1
    -rw-r--r--@  1 cc  staff  6148  7 17 08:08 .DS_Store
    drwxr-xr-x   7 cc  staff   224  7 17 23:00 ./
    drwxr-xr-x  12 cc  staff   384  6 20 07:40 ../
    total 32
    -----------------------------------
    rock:test cc$ cat rootfile | sort -t ':' -k 2
    total 32
    drwxr-xr-x   7 cc  staff   224  7 17 23:00 ./
    -rw-r--r--   1 cc  staff   262  7 17 23:00 test1
    -rw-r--r--   1 cc  staff     0  7 18 22:06 rootfile
    -rw-r--r--@  1 cc  staff  6148  7 17 08:08 .DS_Store
    -rw-r--r--   1 cc  staff     0  7 17 08:08 bashtest.sh
    drwxr-xr-x  12 cc  staff   384  6 20 07:40 ../
    -rw-r--r--   1 cc  staff     8  7 17 22:59 test
uniq unqie重复数据筛选
命令:uniq [-ic]
    -i 忽略大小写
    -c 计数
wc 计算输出的信息的整体数据
命令:wc [-lwm]
    -l 仅列出行
    -w 仅列出都是字
    -m 多少字符
例子:
rock:test cc$ cat rootfile  | wc 
       8(行数)      65(字数)     359(字符数)
rock:test cc$ cat rootfile  | wc -l
       8
rock:test cc$ cat rootfile  | wc -w
      65
rock:test cc$ cat rootfile  | wc -m
     359

3、双向重定向 tee

tee [-a] file
     -a 累加方式写入数据到file
例子:last | tee -a test.txt | more

4、字符转换tr 、col、join、paste、expand

tr 替换/删除文字
命令:tr [-ds] str [str1]
    -d 删除信息中的str
    -s 替换重复字符
例子:
rock:test cc$ cat rootfile | tr -d ':'
total 32
drwxr-xr-x   7 cc  staff   224  7 17 2300 ./
drwxr-xr-x  12 cc  staff   384  6 20 0740 ../
-rw-r--r--@  1 cc  staff  6148  7 17 0808 .DS_Store
-rw-r--r--   1 cc  staff     0  7 17 0808 bashtest.sh
-rw-r--r--   1 cc  staff     0  7 18 2206 rootfile
-rw-r--r--   1 cc  staff     8  7 17 2259 test
-rw-r--r--   1 cc  staff   262  7 17 2300 test1
------------------
rock:test cc$ cat rootfile | tr 't' '0'
0o0al 32
drwxr-xr-x   7 cc  s0aff   224  7 17 23:00 ./
drwxr-xr-x  12 cc  s0aff   384  6 20 07:40 ../
-rw-r--r--@  1 cc  s0aff  6148  7 17 08:08 .DS_S0ore
-rw-r--r--   1 cc  s0aff     0  7 17 08:08 bash0es0.sh
-rw-r--r--   1 cc  s0aff     0  7 18 22:06 roo0file
-rw-r--r--   1 cc  s0aff     8  7 17 22:59 0es0
-rw-r--r--   1 cc  s0aff   262  7 17 23:00 0es01
col [-xb]
    -x 将tab键转换为对等的空格键
    -b 文字内有反斜杠/ 时,仅保留反斜杠后的两个字符
join 将两个文件中有相同数据的一行加在一起
命令:join [-ti12] file1 file2
     -t join默认以空格符分隔数据
     -i 忽略大小写
     -1 index : 数字1,代表第一个文件用第几个字符分析
     -2 index : 数字2,代表第二个文件用第几个字符分析
paste 将两行数据黏贴在一起,且中间以[tab]隔开
命令:paste [-d] file1 file2
    - file部分写-表示使用stdin的数据
    -d 后接分隔字符,默认tab
expand 将tab键转为空格键
expand [-t] file 
-t 后接数字,表示用几个数字替换tab ,默认tab8个空格替换,
split 切割
命令:split [-bl] file PREFIX
    -b 后接欲切割成的文件大小
    -l 以行数切割
    PREFIX 前导符,可作为切割文件的前导文件
xargs 参数代换
产生某个命令的参数,可以读入stdin的数据以空格或断行进行分辨,将stdin的数据分隔为arguments
命令:xargs [-0epn] command
    -0 输入的stdin含特殊字符时,还原为一般字符
    -e 后面接字符串,碰到字符串即停止
    -p 执行每个命令的参数时,询问用户
    -n 后接次数,每次command执行时,使用几个参数
 减号(-)的特殊意义
 如:ls -al / | split -l 10 - lsroot
 此时-用作stdin,读取管道符|前的stdout作为stdin,然后切割了放入lsroot开头的文件

六、read

read [-pt] var
    -p 后接提示符
    -t 等待的秒数
示例: 显示提示符并等待20秒,name用于获取用户键盘输入
      read -p "Please input your name: " -t 20 name
      $name:使用上述用户输入值

七、变量内容的删除、替代与替换
1、删除

# 表示从变量内容的最前面开始向右删除,且删除最短的那个
## 删除最长的
% 从后向前,最短
%% 从后向前,最长
${var#要被删除的部分}
例:

变量内容的删除
2、替换

替换首个 ${path/旧字符/新字符}
替换所有 ${path//旧/新}

3、内容判断与替换

当old未定义(不包含空字符串),此时new取值content
new_var=${old_var-content}
例:
rock:~ cc$ echo $test

rock:~ cc$ test=${test-default}
rock:~ cc$ echo $test
default

内容删除
内容测试替换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值