1
2
3
4
ll |grep bash
echo $SHELL
touch helloword.sh
脚本以#!/bin/bash开头(指定解析器)

脚本的常用执行方式
1.第一种:采用bash或sh+脚本的相对路径或绝对路径(不用赋予脚本+x权限)
2.第二种:采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)
chmod 777 helloworld.sh

Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。

只有文件所有者和超级用户可以修改文件或目录的权限。可以使用绝对模式(八进制数字模式),符号模式指定文件的权限。

使用权限 : 所有使用者
八进制语法
chmod命令可以使用八进制数来指定权限。文件或目录的权限位是由9个权限位来控制,每三位为一组,它们分别是文件所有者(User)的读、写、执行,用户组(Group)的读、写、执行以及其它用户(Other)的读、写、执行。历史上,文件权限被放在一个比特掩码中,掩码中指定的比特位设为1,用来说明一个类具有相应的优先级。

权限 rwx 二进制

  1. 常用系统变量
    $HOME、$PWD、$SHELL、$USER等
    自定义变量
    1.基本语法
    (1)定义变量:变量=值 等号两边没有空格
    (2)撤销变量:unset 变量
    (3)声明静态变量:readonly变量,注意:不能unset
    1
    2
    3
    4
    5
    [root@zhaokk ~]# readonly B=3
    [root@zhaokk ~]# echo $B
    3
    [root@zhaokk ~]# unset B
    -bash: unset: B: cannot unset: readonly variable
    2.变量定义规则
    (1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
    (2)等号两侧不能有空格
    (3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
    (4)变量的值如果有空格,需要使用双引号或单引号括起来。

    可把变量提升为全局环境变量,可供其他Shell程序使用

    export 变量名
    特殊变量:$n
    1.基本语法
    $n (功能描述:n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}),脚本尽量不能超过5
  2. 4 特殊变量:$#
    1.基本语法
    $# (功能描述:获取所有输入参数个数,常用于循环)
  3. 5 特殊变量:$、$@
    1.基本语法
    $
    (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
    $@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
  4. 6 特殊变量:$?
    1.基本语法
    $? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
    1
    2
    3
    4
    5
    6
    7
    [root@zhaokk ~]# echo $?
    127
    [root@zhaokk ~]# ./helloword.sh
    helloworld

    [root@zhaokk ~]# echo $?
    0
    运算 expr 运算符间有空格
    条件判断
    1.基本语法
    [ condition ](注意condition前后要有空格)
    注意:条件非空即为true,[ atguigu ]返回true,[] 返回false。
    1
    2
    [ 23 -ge 22 ]
    [atguigu@hadoop101 datas]$ echo $? 0
    Shell工具(重点)
  5. 1 cut
    cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。
  6. 基本用法
    cut [选项参数] filename
    说明:默认分隔符是制表符
  7. 选项参数说明
    表1-55
    选项参数 功能

-f 列号,提取第几列
-d 分隔符,按照指定分隔符分割列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
由于vi编辑器不能使用鼠标,所以一个大文件如果要到最后一行只用键盘下键的话会是一个很痛苦的过程,还好有各种比较快捷的方法归我们使用:
1. vi 编辑器中跳到文件的第一行:
   a 输入 :0 或者 :1 回车
   b 键盘按下 小写 gg

2.vi 编辑器跳到文件最后一行:
   a 输入 :$ 回车
   b 键盘按下大写 G
   c 键盘按 shift + g (其实和第二种方法一样)

Vim快速移动光标至行首和行尾

1、 需要按行快速移动光标时,可以使用键盘上的编辑键Home,快速将光标移动至当前行的行首。除此之外,也可以在命令模式中使用快捷键"^"(即Shift+6)或0(数字0)。
2、 如果要快速移动光标至当前行的行尾,可以使用编辑键End。也可以在命令模式中使用快捷键"$"(Shift+4)。与快捷键"^"0不同,快捷键"$"前可以加上数字表示移动的行数。例如使用"1$"表示当前行的行尾,"2$"表示当前行的下一行的行尾。

将passwd文件中的用户id增加数值1并输出

1
awk -F : -v i=1 '{print $3+i}' passwd

统计当月销量的最高TOP10
ETL
使用Linux命令查询file1中空行所在的行号

1
2
[root@zhaokk ~]# awk '/^$/{print NR}' cut.txt 
7

Shell脚本里如何检查一个文件是否存在?如果不存在该如何处理?

1
2
3
4
5
6
7
8
9
10
11
12
[root@zhaokk ~]# touch check.sh
[root@zhaokk ~]# vim check.sh
#!/bin/bash
if [ -f file.txt ]
then
echo "文件存在"
else
echo "文件不存在"
fi
[root@zhaokk ~]# chmod 777 check.sh
[root@zhaokk ~]# ./check.sh
文件不存在