Linux环境下shell使用

一、shell定义

1、定义

(1)shell :负责完成用户与内核之间的交流

(2)shell命令:用户相系统内核发出空中请求,与之交互的文本流

(3)shell脚本:一堆命令集合。

2、shell命令使用

(1)命令 [选项] [参数]     

         选项:功能

         参数:要操作的对象

注意:

  1. 一条命令的三要素之间用空格隔开
  2. 若将多个命令写在一行,用分号隔开
  3. 如果一条命令不能在一行写完,在行尾使用反斜杠(\)标明该命令未结束

二、用户系统相关命令

1、用户切换命令

(1)方式1:

su - 用户名  ==>su -

注意:这样切换用户的工作路径以及环境变量会发生改变。

         方式2:

su root

注意:路径不会发生改变

2、系统管理命令

         top:动态显示系统中运行的程序

         ps:显示该用户运行的进程列表

         ps -ef:查看所有的进程以及PID(进程号)

         ps -aux:除了-ef功能外,还可以显示CPU及内存占用率

         kill:输出指定的信号给指定的进程

         kill -l :列出所有可用的信号名称

3、磁盘相关命令

        free:查看当前系统的内存的使用情况

        df:查看文件系统的磁盘控件占用情况

        du:统计目录或者文件所占磁盘空间的大小

        fdisk -l:列出文件系统的分区情况

4、文件目录及相关命令

(1)LinuxOS下的7种文件类型:

  1. 普通文件 -
  2. 目录文件 d
  3. 字符设备文件 c
  4. 块设备文件 b
  5. 管道文件 p
  6. 链接文件 l
  7. 套接字文件 socket(s)

(2)命令

(2.1.1)cd :改变工作目录

        格式:cd [路径]

        cd -:可以回到前次工作目录

        “./”表示当前目录,“../”表示上级目录

(2.1.2)ls:列出目录的内容

        格式: ls [选项] [文件]

(2.1.3)mkdir:创建一个目录

        格式:mkdir [选项] 路径

        -p :mkdir 创建的目录可以是一个路径名称。可以一次多创建几个目录。

(2.1.4)cat:连接并显示指定的一个或多个文件的有关信息。

        格式:cat  [选项]文件1、文件2...

        cat:适合查看比较短的文档

           cat命令常见参数

-n :由第一行开始对所有输出的行数编号

-b :和 -n 相似,只是对于空白行不编号。

        more:适合查看比较长的文档(按回车向下翻一行,空格向下翻一页,按q退出)

        less:加强版的more,适合查看比较长的文档(按回车向下翻一行,空额向下翻一页,按q退出,支持上下箭头)

(2.1.5)cp、mv、rm

        cp :拷贝   

例如:将一个目录文件下的文件和目录拷贝到不同的目录里面并打印复制的文件和目录个数:用shell脚本实现

Linux环境下shell使用_第1张图片

cp常见参数

-a :保留连接、文件属性,并复制其子目录,其作用等于dpr选项的结合

-d :复制时保留连接

-f :删除已经存在的目标文件而不提示

-i :再删除目标文件给出提示,要求用户确认

 -p :出复制源文件外,将其时间和访问权限也一起复制

-r :将文件中的内容全部复制给另一个文件

mv :为文件或目录改名,或将文件由一个目录移入另一个目录中

格式:mv [选项]源文件或目录     目标文件或目录

-i :若 mv 操作将导致对已存在的目标文件的覆盖,此时系统询问是否重写。      将当前目录下文件移动到目标目录文件下,则原文件下文件被自动删除

-f :有 -i 担任功能,强制删除,不会提醒

rm :删除一个目录中的一个或多个文件或目录

格式:rm [选项]文件或目录

 -i :进行交互式删除

-f :忽略不存在的文件,但不给提示

-r :将rm 列出的目录文件全部递归的删除。  删除不会恢复,所以最好使用 -i 参数。

(2.1.5)chown和chgrp

作用:

chown:修改文件所有者和组别

chgrp: 改变文件的组的所有权

格式:

chown:  chown [选项]...   文件所有者[所有者组名]文件

注意:其中的文件所有者为修改后的文件所有者

chgrp: chgrp[选项]...  文件所有组文件

注意:其中的文件所有组为修改后的文件组拥有者

chown 和chgrp命令常见参数

-c ,-changes :详尽的描述每个file实际改变了哪些所有权

-f ,--silent ,--quiet :显示全部错误信息

(2.1.6)chmod

作用:改变文件的访问权限

格式:可以使用符号标记和八进制数指定两种方式进行修改

参数

-c :若该文件权限确实已经更改,才显示其更改动作

-f :若该文件权限无法被更改也不要显示错误信息

-v :显示权限变更的详细资料

文件访问权限可以更改成:- rwx rwx rwx

a、3各不同的用户级别:文件拥有者(u)、所属的用户组(g)、系统里的其他用户(o)。

列如:可使用o+w==>给用户添加写的权限

b、八进制修改文件权限:有权限用1表示,-表示无权限用0表示

列如:rw- r-w  r-- ==>110、101、100也就是654

注意:使用chmod必须具有root 权限

(2.1.7)grep

作用:在指定文件中搜素特定的内容,并将含有这些内容的行标准输出。

格式:grep 字符串 文件

-n :显示行号

-I :不区分大小写

代码实现:

(2.1.8)find

作用:在指定目录中搜素文件,它的使用权限是所有用户。

格式:find 路径 选项 描述

常见参数:

-name :支持通配符“*” 和“?”,根据名字

-print :输出搜素结果,并且打印

 (2.1.9)硬链接和软链接

ln 作用:用于在文件之间建立链接

硬链接:利用Linux中为每个文件分配的物理编号--inode建立链接   

格式:ln [选项]源文件或目录、目标文件或目录

软链接:利用文件的路径名建立链接

格式:ln  -s [选项]源文件或目录、目标文件或目录

区别:

(1)软链接会在用户选定的位置生成一个文件的镜像,不会重复占用磁盘空间,平时使用最多的就是软链接

(2)硬链接会在用户选定的位置上生成一个和源文件大小相同的文件

共同点:

无论是软链接还是硬链接都会保持同步性,不论修改哪一处,其它文件都会发生相同的变化

(2.1.10)压缩打包相关命令

压缩工具:gzip、bzip2

注意:gzip、bzip2只能压缩文件

压缩格式:

gzip 文件名,后缀为.gz

bzip2 文件名,后缀为.bz2

解压:方式1:

gzip -d 文件名

bzip2 -d 文件名

方式2:

gunzip 文件名

bunzip2 文件名

tar:对文件目录进行打包或解包,后缀为.tar

-c:打包

-x:解包

-v:显示详细过程

-f:指定包文件名(该参数必须放在最后)

-z:调用gzip 或者gunzip

-j:调用bzip2或者bunzip2

(2.1.11)文件比较命令 diff

作用:比较两个不同的文件或不同目录下的两个同名文件功能,并生成补丁文件。

格式:

diff [选项]  文件1  文件2

-r :对目录进行递归处理

-q :只报告文件是否有不同,不输出结果

-e , -ed :命令格式

-c , --context :旧版上下文格式

-u , --unified :新版上下文格式

三、Linux 环境变量

1、env:查看所有的环境变量    添加环境变量使用export命令

2、临时添加: 只对当前终端有效,如果关闭终端,则添加的环境变量就不存在。

通过pwd可以查看可执行所添加程序 的路径。

3、永久添加

(1)sudo vim /etc/profile

(2)在文件末尾添加:export PATH=$PATH:/home/linux/22121/day2(要添加的路径)

(3)source /etc/profile  或者 重启

4、Linux 用户管理

4.1 添加用户:

sudo adduser 用户名

4.2 修改用户密码

sudo passwd 用户名

4.3 删除用户

注意:删除的时候连同用户的主目录一起删除

sudo deluser --remove-home 用户名

4.4 添加组

sudo groupadd 组名

4.5 修改用户所在组

sudo usermod -g 目标组 要修改的用户

4.6 删除组

sudo groupdel 组名

5、共享文件

  1. 虚拟机-->设置-->选项-->共享文件夹            注意:共享文件夹在/mnt/hgfs
  2. ifconfig)查看ip地址

6、Linux 软件管理安装

安装软件包:

  1. sudo apt-get update
  2. sudo apt-get install 包名

卸载:

sudo apt-get remove 包名

7、特殊字符

7.1 反引号: ` `

作用:反引号括起来的字符串被shell解释为命令行,在执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号(包括两个反引号)部分。反引号可以用()代替。

例如:$ TestString="`echo $HOME ` ` sy[n]*`"

可以替换成:$ TestString="$(echo $HOME) $(sy [n]*)"

7.2  |:管道(一般不单独使用)

作用:将前一个命令的输出作为后一个命令的输入

7.3 通配符

*:匹配任意长度的字符串

?:匹配一个长度的字符串

[]:匹配其中指定的一个字符

[-]:匹配指定的一个字符范围

[^...]:除了其中指定的字符外均可匹配

注意:除了*和?,其它均是匹配一个字符

7.4 输入输出重定向

>:输出重定向,如果文件不存在则新建,如果文件存在则清空文件中的内容

>>:追加重定向,如果文件不存在则新建,如果文件存在则追加在文件的末尾

wc -c:统计文件有多少个字符

wc -l:统计文件有多少行

2>或&>:将错误信息输出到指定的文件中

四、shell 脚本

1、shell脚本创建以及运行过程

(1)touch 1.sh

(2)编辑 vim 1.sh

(3)执行的时候没有权限,需要人为的去添加     chmod 777 1.sh

(4)运行     ./1.sh

2、shell变量

2.1 shell允许用户建立 变量存储类型,它不支持数据类型

注意:任何赋值给变量的值都被shell解释为一串字符

命名规范:

  1. 由数字、字母下划线组成,且首字母不能为数字
  2. shell中变量通常用大写标识

注意:

(1)要取用变量的值,只需要在变量前面加一个$

(2)等号的左右两侧不能有空格

2.2 预定义变量

$#:包含命令行参数的个数

$@: 包含所有命令行参数

$*: 包含所有命令行参数

$?:包含前一个命令的退出状态,正常退出返回0,返回返回非0(shell中0为真,非0为假)

$$:包含正在执行进程的ID号

2.3 环境变量

案例:在用户的主目录下创建一个mydir的文件夹,在该文件夹中创建一个1.txt,然后向1.txt中写入”hello shell”

Linux环境下shell使用_第2张图片

 3、shell程序和语句

3.1 #:标识注释

3.2  功能性语句

输出:echo自带换行       不换行:添加-n参数

输入:read 变量              想要添加提示语:添加-p参数      注意:双引号后面必须添加空格

3.3 expr

作用: expr主要用于简单的整数运算,包括加(+)、减(-)、乘(\*)、整除(/)和求模(%)

注意:expr与变量以及变量与运算符之间必须加空格

//shell脚本程序实现
#!/bin/bash 
#告诉计算机使用那个版本的shell来解析我们的代码
read -p "请输入INT
" A B string
[ $A -gt $B ]  //比较两个数的大小
echo $?     //返回上一个比较值,输出为0则正确,其它值则表示错误
[ $string = "hello" ]  //比较字符串大小是否相同
echo $?
NUM=`expr $A \* $B`  //两数相乘
mkdir $HOME/22121/mydir  //在家目录下新建一个文件夹
cd $HOME/22121/mydir   //进入新建的文件夹
echo "hello shell">1.txt    //在新建的文件夹内的文件写入“hello shell”
echo $?

echo "NUM=$NUM"   //取两数相乘的结果    $用于取值
echo "this is the ${NUM}"   //加中括号一般用于字符转换

结果:

Linux环境下shell使用_第3张图片

4、test   测试字符串、整数、文件属性

4.1 字符串测试

s1 = s2 测试两个字符串的内容是否一致

s1 != s2 测试两个字符串的内容是否不一致

-z s1 测试s1 字符串的长度是否为0

-n s1 测试s1 字符串的长度是否不为0

注意:”[“的右侧以及 “]”的左侧必须有空格

4.2 测试文件属性

-e name   测试name是否存在

-d name      测试name 是否为一个目录

-f name 测试name 是否为普通文件

-L name 测试name 是否为符号链接

-r name 测试name 文件是否存在且为可读

-w name 测试name 文件是否存在且为可写

-x name 测试name 文件是否存在且为可执行

-s name 测试name 文件是否存在且其长度不为0

f1 -nt f2 测试文件f1 是否比文件f2 更新

f1 -ot f2 测试文件f1 是否比文件f2 更旧

5、 控制语句

(1)单分支选择语句

if [ 表达式 ]

then

语句

fi

(2)双分支选择

if [ 表达式 ]

then

语句1

else

语句2

fi

(3)多分支选择

if [表达式1]

then

语句1

elif[表达式2]

then

语句2

....

elif [表达式n]

then

语句n

else

语句n+1

fi

Linux环境下shell使用_第4张图片

 (4)

case 字符串变量 in

模式1)

语句1

;;

模式2)

语句2

;;

.....

模式n)

语句n

;;

*)

语句n + 1

;;

esac

注意:最后一个双分号可以省略,其它不能省略

案例:请输入你想下载文件的名字,让用户确认,用户输入是否下载这个软件,[Y/N/Q],Y:正在下载 N:用户取消下载 Q:退出

Linux环境下shell使用_第5张图片

 (5)循环语句

for 变量 in 单词表

do

语句

done

打印乘法口诀:

Linux环境下shell使用_第6张图片

while [表达式]

do

语句

done

(1)break:跳出循环

(2)continue:结束本次循环,开始下一次循环

(6) 函数

6.1 函数的定义

方式1:

函数名()

{

}

方式2:

function 函数名()

{

}

6.2  函数的调用

方式1:

变量=`函数名 参数列表`

方式2:

函数名 参数列表

注意:平时使用最多的是方式2

你可能感兴趣的:(linux,c语言,算法)