《Linux命令行与shell脚本编程大全》笔记一

第一章 初始 Linux shell

Linux内核主要四种功能:

1.系统内存管理 2.软件程序管理
3.硬件设备管理 4.文件系统管理

shell:交互工具。

第三章 基本的bash shell 命令

1.man:查系统手册。

2.cd:切换目录。

绝对文件路径:从“\”目录开始访问路径。可用 pwd 查看当前目录绝对路径值。

相对文件路径:从当前目录开始,路径不以“/”开头。

.. :上级目录。
. :当前目录。

3 . ls

ls -l :显示当前目录下的文件和目录。

ls -a :显示隐藏文件。

ls -R :递归显示当前目录下包含的子目录中的文件。

ls -F :区分文件和目录(后面有/)

4.文件操作

文件:

创建空文件:touch filename

删除文件:rm fielname (加-f 不提示)。

复制文件:cp source destination (加 -i 询问是否要覆盖已有文件)。

递归复制整个目录的内容:cp -R source destination。

创建链接文件:

符号链接:新文件,存在唯一的inode,依赖于源文件。ln -s file ls_file

硬链接:源文件的别名。ln file ls_file

ls_fiel:链接文件的名字

文件重命名:mv file1 file2 (fiel1 改名为file2)

文件位置移动:mv file destination

查看文件内容:cat filename (-n 给所有的行加上行号)

目录:

创建目录:mkdir directoryname

删除空目录:rmdir directoryname

删除非空目录:rm -rf directoryname

5.more 与 less

分页工具:more

more filename 后,可以按空格或回车逐行向前了浏览文件,按q键退出。

less :可以在本文件中前后翻动。

6.查看部分文件:

tail -n 10 查看文件倒数10行数据

head -n 10 查看文件前10行数据

第四章 更多的bash shell 命令

1.查看系统上运行的所有进程 ps -ef 或 ps -aux

2.实时显示系统进程信息: top

3.进程信号

ctrl+ z :变成后台进程,发送信号SIGSTOP
ctr + c :结束当前进程,发送信号SIGINT
ctrl+ / :退出当前进程,发送信号 SIGQUIT

4.挂载存储媒体

例:挂载U盘步骤

  1. 虚拟机检测到U盘,并连接。
  2. fdisk -l 查看磁盘分区情况。
  3. mount -t vfat /dev/sdb1 /mnt/USB 挂载到/mnt/USB
  4. ls -al /mnt/USB 查看U盘文件
  5. 卸载U盘 umount /mnt/USB
  6. 如果device is busy 则切换到home下 cd /home ,然后 umount /home/mnt/USB
    就可以了

5.查看所有已挂载磁盘的使用情况 df

6.显示当前目录下所有的文件、目录和子目录的磁盘使用情况: du

7.sort 排序命令

cat sort.txt | sort //根据每行首字母排序,默认升序
或sort sort.txt

sort -t , -k 1 sort.txt
-t:指定域分割字符
-k:指定域

[root@localhost home]# sort -t , -k 2 sort.txt
[root@localhost home]# sort a //根据字符ascii编码值排序
[root@localhost home]# sort -n a //根据整数大小
[root@localhost home]# sort -n -r a //改变排序方向(倒序)
[root@localhost home]# sort -t , -k 3.2 sort.txt //根据指定域

8.grep 搜索数据

-a:搜索二进制

-i:忽略大小写

-n:显示文本行数

grep [option] pattern [file]

例:

在文件file1 中查找“hello”:grep hello file1

查找以’t’开头的行:grep ‘^t’ passwd

查找以’t’结尾的行:grep ‘t$’ passwd

查找不以A-Z,a-z开头的行:grep ‘^[^a-z A-Z]’ passwd

9.tar 命令:

[root@localhost home]# tar -cf hello.tar.gz hello2.c
hello.c
//创建压缩文件
[root@localhost home]# tar -cvzf hellonew.gz hello2.c
hello.c //”z”,压缩算法

[root@localhost home]# tar -tvf hellonew.gz //列出压缩文件中
有文件信息

[root@localhost home]# tar -xvzf hellonew.gz //解压

[root@localhost home]# tar -xvf hello.tar.gz //解压

[root@localhost home]# tar -xvzf hellonew.gz -C /tmp //解压
到制定目录,”-C “

第五章 理解shell

1.进程列表

例:依次执行命令,命令用括号括起来,成为进程列表 (pwd ; ls;cd/etc ; pwd ; cd

; pwd ; ls)

2.后台模式

在命令后加 &字符

第六章 使用Linux环境变量

bash shell中,环境变量分两类:全局变量和局部变量。

1.查看全局变量:用 env 或者 printenv 命令

2.设置局部用户变量

例:

$ my_variable=”hello world”(变量名、等号和值之间没有空格)

echomy_variable

hello world

3.设置全局变量

用export ,变量名前不需要加$

4.删除环境变量

用unset ,变量名前不用加$

5.数组变量

例:

$ array=(1 2 3 4 5)

echo{array[*]} 输出数组全部变量

$ array[0]=3 改变数组的某个值(下标从0开始)

$ unset array[[0] 删除数组的第一个值

第七章 Linux的安全性

1./etc/passwd 用户信息文件

/etc/shadow 只有root用户才能访问

2.用户操作

添加用户

useradd 或 adduser username

删除用户

userdel username (加 -r 选项会删除系统中属于该用户的任何文件)

修改用户

-p:该密码

-L:锁定用户,使用户无法登陆

-U:解除锁定,使用户能登陆

3.修改用户密码

第一种方法:usermod -p 123456 username

第二种方法:passwd username 然后输入密码

第三种:echo “123456”| passwd –stdin username

4.文件权限

-rwxrw-r-x

-:文件类型,普通文件
rwx:文件属主的权限
rw-:属组成员的权限
r-x:其他用户的权限

r:可读(4)。 w:可写(2)。 x:可执行(1)。

改变文件访问模式 chmod :

u+|-|=:改变文件所用者操作模式(+ 新增 - 取消 = 指定模式)

[root@localhost home]# chmod u=rx a.out
[root@localhost home]# chmod u+w a.out
[root@localhost home]# chmod u-r a.out

g+|-|=:改变文件所用者同组用户操作模式

[root@localhost home]# chmod g=rx a.out
[root@localhost home]# chmod g+w a.out
[root@localhost home]# chmod g-r a.out

o+|-|=:改变其它组用户操作模式

[root@localhost home]# chmod o=rx a.out
[root@localhost home]# chmod o+w a.out
[root@localhost home]# chmod o-r a.out

a+|-|=:所有用户操作模式

[root@localhost home]# chmod a=rx a.out
[root@localhost home]# chmod a+rx a.out
[root@localhost home]# chmod a-rx a.out

[root@localhost home]# ./a.sh
bash: ./a.sh: 权限不够
[root@localhost home]# chmod u+x a.sh
[root@localhost home]# ./a.sh

改变所属关系:

chown owner filename

第十章 vim编辑器

vim/vi 文本编辑

vim 三种操作模式:

1.输入模式
2.命令模式
3.末行模式
按下 字母 :i
命令模式 ——————>输入编辑
按下:esc
输入编辑 ——————>命令模式
按下:shift+:
命令模式 ——————>末行模式

[root@localhost home]# vim test //打开文件(文件不存在先创建)

命令模式常用的命令:

yy:复制当前行
nyy:复制多行(n>=2)
pp:粘贴
dd:删除当前行
ndd:删除多行(n>=2)
shift+~:大小写替换
gg=GG:语句块自动排版
gg:快速定位到文件首行
GG:快速定位到文件末行

末行模式常用的命令:

wq:保存退出
q!:强制退出
w filename:文件另存为
set nu:显示行号
set nonu:取消行号显示
u:撤销最近一次更新
!shell指令 !ls :执行shell指令
%s/原字符/新字符/:替换每行的首次匹配的原字符
%s/原字符/新字符/g:替换整个文件匹配的原字符
:%s/\/usr\/home/111111/g :”\/”取消特殊含义
:%s/^/新字符/:在每行开头添加字符
/key word/:高亮度显示关键字
split filename :水平分屏,ctr+w 切屏
vsplit filename :垂直分屏

第二部分 shell脚本编程基础

第十一章 构建基本脚本

  • 1.创建shell脚本文件时,文件第一行必须指定使用的shell。

    格式为:#!/bin/bash

“#!”告诉系统用哪个解释器执行,可以是bash,也可以是sh

“#”注释符

  • 2.echo -n 文本字符串和命令输出显示在同一行
  • 3.使用环境变量

    环境变量前加 {variable}

  • 4.命令替换

    命令输出信息赋值给变量。

    两种表示:反引号字符(“) 和 $()

例:testing=`date` 等价于 testing=$(date)
  • 5.重定向输入输出

    输出重定向:> 和 >>

 [root@localhost home]# ls -l  >  ls.txt //标准输出到文件,如果文件
   不存在先创建文件ls.txt,如果文件存在并且有数据,先清空文件,再写数据

   [root@localhost home]# echo "hello" >> ls.txt//在文件末尾追加数据

输入重定向:< 和 <<

 <  :command  < inputfile 将文件的内容重定向到命令

   [root@localhost home]# wc < test.txt

   wc统计文本的行数、单词、字节数

   << :必须指定一个文本标记来划分输入数据的开始和结尾。



   [root@localhost home]# wc << EOF//连续多次从键盘输入,"EOF终止输入结束字符
  • 6.管道

    “|”称为管道符号(匿名管道),实现进程之间通信.把前一个进程标准输出 数据作为下一个进程的标准输入

    例:

    [root@localhost home]# cat /etc/passwd | grep root | wc

    管道最流行的用法之一是将命令行产生的大量输出通过管道传送给more命令。

  • 7.执行数学运算

  • expr 命令:处理数学表达式(+ - * / % | & < 等 )

    [root@localhost shell]# expr 1 + 2

    注意:有歧义的符号(如 *)要在前面加转义字符()

    2.使用方括号:

    [root@localhost shell]# c=$[1+2]

    3.浮点解决方案

    用内建的bash计算器:bc ,必须输入qiut来退出
    [root@localhost ~]# bc bc 1.06.95 Copyright 1991-1994, 1997, 1998,
    2000, 2004, 2006 Free Software Foundation,

    Inc. This is free software with ABSOLUTELY NO WARRANTY. For details
    type `warranty’. 8*9.999
    79.992在shell脚本中设置scale值来控制小数位数。
    4.查看退出状态码

    [root@localhost shell]# echo $?

    0 为成功结束,正数是命令结束有错误 (状态码范围0 ~ 255)

第十二章 使用结构化命令

  • 1.if-then语句:

if 条件
then
执行语句
else
执行语句
fi

if 条件;then
执行语句
else
执行语句
fi

嵌套if:

if 条件
then

执行语句
elsif
执行语句
then
执行语句
fi

  • 2.条件格式:

a.[ 条件 ] (注意两边都有空格)
b.test 条件

可用布尔逻辑来组合(&& || and or)

条件分类:

1.数字条件

   -eq     两个数是否相等
   -ne     两个数是否不相等
   -le     第一个数是否小于或等于第二个数
   -ge     第一个数是否大于或等于第二个数
   -gt     第一个数是否大于第二个数
   -lt     第一个数是否小于第二个数

   [root@localhost shell]# test $a -ge $b
   [root@localhost shell]# echo $?

   [root@localhost shell]# [ $a  -lt $b ]
   [root@localhost shell]# echo $?

记住:bash shell只能处理整数。

2.字符条件

   >:第一个字符串是否大于第二个字符串
   = :测试两个字符串是否相等
   != :测试两个字符串是否不相等
   -z :测试字符串是空字符串
   -n :测试字符串是非空字符串
  [root@localhost shell]# test  "abc" = "abc" 
  [root@localhost shell]# echo $?

  [root@localhost shell]# test  -n  "$a"  
  [root@localhost shell]# echo $?

3.文件系统判断条件

 -e 测试文件或目录是否存在
   -d 测试文件是否是目录文件
   -s 测试文件是否非空
   -f 测试文件是否存在
   -w 测试文件是否可写
   -L 测试文件是否是符号连接     
   -x 测试文件是否可执行
   -r 测试文件是否可读
file1 -nt file2 测试file1是否比file2新
file1 -ot file2 测试file1是否比file2旧

   [root@localhost shell]# test  -f  test.sh
   [root@localhost shell]# echo $?  //0:验证正确  1:以上验
   证错误

   [root@localhost shell]# test  -d  abcd
   [root@localhost shell]# echo $?

   [root@localhost shell]# [ -d  test.sh ]
   [root@localhost shell]# echo $?
  • 3.if-then 的高级特性

1.使用双括号:可在比较过程中使用高级数学表达式,而test只能在比较中使用简单的

算术操作。

((expression))

++ 、 – 、!、~ 、**(幂运算) 、<< 、>>、& 、|、&&、||

4.case 命令

case 变量名 in
值1 ) 执行语句;;
值2 ) 执行语句;;
值3 ) 执行语句;;
esac

例:输入 两个操作数,输入一个运算符号(+ - * /) 计算出结果

\#!/bin/bash
read  d1 op d2
case  $op  in
   "+" )  echo  $[$d1+$d2];;
   "-" )  echo  $[$d1-$d2];;
   "*" )  echo  $[$d1*$d2];; 
   "/" )  echo  $[$d1/$d2];;
   *   )  echo  "input error" //其它输入符号
 esac

第十三章 更多的结构化命令

1.for命令

  1. for 变量 in 值集合
    do
    命令
    done
    值集合中根据空格区分单个值
    使用“ 把指令输出的结果变成for循环集合。

例:

filename=`ls -l /etc |  grep  '^-' | awk '{print $9}'`
for f in $filename
do
    echo $f
done

2.for((a;b;c))
do
命令
done
a:初始化循环体变量
b:判断条件
c:改变循环体变量值

3.改变字段分隔符

系统默认字段分隔符:空格、制表符、换行符。

用IFS=$’\n’ 忽略空格和制表符

技巧:

IFS.OLD=$IFS
IFS=$’\n’
<在代码中使用新的IFS值>
IFS=IFS.OLD

这样保证了脚本后续操作中使用的是默认的IFS值。

4.while 命令

while [ 条件 ]
do
命令
done

5.until 命令

until 当条件成立 退出循环

until [ 条件 ]
do
命令
done

6.break 和continue 控制循环

break:结束本层循环。

continue:结束本次循环(continue 后面的语句不执行,直接执行下一次
循环),继续下一次循环。

第十四章 处理用户输入

1.读取参数

例:

[root@localhost shell]# ./test 10 30

01 是第一个参数,依次类推下去,第十个为${10}。

2.读取文件名

用basename命令可以返回不包含路径的脚本名。

例:

这里写图片描述

这里写图片描述

3.特殊参数变量

$# 命令行参数个数。

@:表示所有脚本参数的内容。
区别:@把所有参数当做同一个字符串中的多个

独立的单词。
$$:获取当前的进程的ID值。

4.移动变量

shift :可跳过不需要的参数

shift 2:跳过两个参数。

5.分离参数选项

双破折号(–)表明选项列表结束,剩下的命令行参数当做参数。

例:

这里写图片描述

这里写图片描述

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页