天天看点

shell基础技能第四章 更多的bash shell命令10.1.5 查找和替换这是做什么的脚本 #这句是描述脚本的用意。这是做什么的脚本 #这句是描述脚本的用意。

#遍历目录

cd

#1.绝对路径

/usr/bin

#2.相对路径

cd . #单点表示当前目录

cd … #双点表示当前目录的父目录

pwd #表示当前路径的全路径是什么?

#3.5文件和目录列表

#3.5.1 基本列表功能

ls #是最基本的形式显示当前目录下的文件和目录,按字母排序

ls -F #-F参数在目录后面加(/),来分辨文件和目录。

ls -a #所有点开头的文件现在都显示出来。

ls -F -R #-R参数是递归选项 ,列出当前目录下包含的子目录中的文件。

#3.5.2显示长列表

ls -l #-l是长列表输出,显示列表文件的信息。

#3.5.3过滤输出列表

ls -l my_script #my_script是具体指定的文件或者目录名字。

ls -l my?pt #?表示中间一个字符的随机。

ls -l my*pt #表示中间多个字符随机。

ls -l my #后面随机

ls -l my_[ai]pt #[ai]表示统配a和i字母的文件或者目录。

ls -l my_[a-i]pt #[a-i]表示统配a到i的文件和目录。

ls -l my_[!a]pt #[!a]表示不是a的文件和目录。

#3.6处理文件和目录

#3.6.1 创建文件

touch zhj #创建zhj的空文件,同时还可以修改文件的创建时间。

ls -l zhj #显示zhj文件的细节。

#3.6.2 复制文件

cp 源 目标 #源和目标都是文件名字时,是将源文件复制文新的文件,并以目标文件命名。

cp -i 源 目标 #-i是询问是否覆盖目标文件。

cp -R Script #使用 -R 递归复制整个目录的内容。

cp -R script/ Mod_Script #把整个script文件复制到 Mod_Script中。

cp -R *script/ Mod_Script #把整个script结尾的文件复制到 Mod_Script中。

#3.6.3 tab键自动补全

#3.6.4 链接文件

ln -s data_file new_data_file #为符合链接文件 data_file new_data_file 是俩个不同的文件。

ln data_file new_data_file #为硬链接,实际上指向上一个物理文件。

ls -li data_file #-li显示为data_file的inode编号以及长列表。硬链接共享inode编号。

#3.6.5 重命名文件

mv fall fzll #把fall文件重命名为fzll ,mv为moving 的缩写。但是inode编号实际上不变化,只是改变了文件名字。

mv fzll /home/xxx/xxx #表示把fzll文件移动到 /home/xxx/xxx下,此命令可以用来移动文件。但是inode编号实际上不变化,只是移动了文件位置。

mv /home/xxx1/xxx/fzll.txt /home/xxx2/xxx2/fall.txt #复制移动改变文件,但是inode没有变化,只是改变了文件位置和文件名字。

cp /home/xxx1/xxx/fzll.txt /home/xxx2/xxx2/fall.txt #复制移动改变文件

mv /home/xxx/xxx /home/xxx/xxx2 #移动文件。

#3.3.6 删除文件

rm -i fall #删除文件,-i是提示是否删除。

rm -l fall #删除文档

rm -f fall #强制删除一些文件,不需要询问是否删除。

#3.7 处理目录

#3.7.1 创建目录

mkdir new_file #创建目录

ls -ld new_file

mkdir -p new_file/sub_dir/under_dir #创建多个目录或者子目录。使用-p参数

#3.7.2删除目录

rm -i xxxx #删除xxxx目录

rm -ri xxxx #可以向下删除目录

rm -ir xxxx #比较繁琐。

tree xxxx #查看xxxx目录的结构。

rm -rf xxxx #没有任何提示,超级用户时候慎用。

#3.8查看文件内容

file my_file #查看文件的类型。

file /bin/ls #查看系统需要的类型库。

#3.8.2 查看整个文件

cat test1 #查看文件

cat -n test1 #-n 会加上行号

cat -b test1 #-b 是只给文本内容加上行号。

cat -T test1 #-T 是不显示制表符

more test1 #显示每页数据后停下来。

less test1 #一次显示一屏幕的数据。

#3.8.3 查看部分文件

tail xxx_file #显示文件的后十行。

tail -n 3 xxx_file #显示最后三行

head xxx_file #显示前10行

head -n 3 xxx_file #显示最后3行

第四章 更多的bash shell命令

#4.1 监测程序

#4.1.1 探索进程(process)

ps #输出运行在系统上所有程序信息。 显示PID是进程id ,TTY是哪个终端,已经进程所有cpu的时间。

ps -ef #-e参数指定显示所有运行在系统的进程,-f参数则是扩展了输出。

ps -l #产生长格式输出。

#4.1.2 实时监测进程

top #实时显示进程

#4.1.3 结束进程

kill 进行id #通过id来结束进程。

kill -s HUP 3940 #-S支持指定其他信号

killall http* #killall支持通过进程名字结束进程,也可以使用通配符。

#4.2 监测磁盘空间

#4.2.1 挂载存储媒体

mount #输出当前系统挂载的媒体设备,包括(媒体设备名字,挂载点,文件系统类型,已挂载的访问状态)

mount -t type device directory

mount -t vfat /dev/sdbl /media/disk

unmount #卸载设备

#4.2.2 使用df命令

df #df是查看磁盘的空间使用情况。

df -h #-h指的是用户容读模式显示

#4.2.3 使用du命令

du #显示某个特定目录的磁盘使用情况,默认当前目录的磁盘文件情况,参数 -s显示输出参数总计 -h按易模式读取,-c显示总文件大小

#4.3 处理数据w文件

sort file1 #排序文件内容

sort -n file1 #把数字识别为数字而不是字符排序。

sort -M #-M识别三个字符的月份。

#4.3.2 搜索数据

grep three file1 #搜索three 在file1文件里。

grep -v three file1 #搜索three 在file1文件里,-v是反向搜索。

grep -n three file1 #搜索three 在file1文件里,-n显示匹配模式所在的行。

grep -c three file1 #搜索three 在file1文件里,-c几行匹配到。

grep -e three -e two file1 #搜索three 在file1文件里,-e是多个匹配模式。

egrep #支持正则表达式,POSIX扩展,

fgrep

#4.3.3 压缩数据

#gzip是 GNU的产物,以下为使用方法:处理.gz文件。

gzip #用来压缩文件。

gzcat #用来查看压缩文件的内容。

guncat #来解压压缩文件。

gzip my* #表示把my开头的文件都压缩了

tar -cvf test.tar /test/test1 #创建test.tar 包归档/test/test1文件

tar -tf test.tar #列出tar的内容

tar -xvf test.tar #提取内容.

#第五章 理解shell

#5.1 shell的类型

passwd /etc/passwd #查看默认的shell类型。

/bin/bash # 直接启动bash shell

exit #退出bash shell

#5.2 shell的父子关系

bash #在父shell建子shell

bash #在子shell建子shell

bash #在子shell建子shell

ps --forest #展示父子shell的结构。

#5.2.1 进程列表

pwd ;ls; cd /etc ;pwd ;cd;pwd;ls #在一行写好多的命令依次执行。

(pwd ;ls; cd /etc ;pwd ;cd;pwd;ls) #在一行写好多的命令依次执行,加()表示成进程列表,会创建对应的子shell

{pwd ;ls; cd /etc ;pwd ;cd;pwd;ls;} #在一行写好多的命令依次执行,加{}表示成进程列表,不会创建对应的子shell

pwd ;ls; cd /etc ;pwd ;cd;pwd;ls; echo $BATH_SUBSHELL #在一行写好多的命令依次执行,echo $BATH_SUBSHELL参数查看是否是子shell,返回0表示未创建子shell ,否则创建。

#子shell并非多进程的处理,因为终端控制着shell的i/o

#5.2.2 别出心裁的shell用法

#1.探索后台模式

sleep #后台模式 sleep 10 ,睡眠10秒

sleep 10000& # &符号表示后台模式

jobs #是显示当前运行在后台模式中的所有用户的进程(作业)

jobs -l #-l选项还能显示命令的父id

#2.将进程列表置入后台

(sleep 2 ; echo $BASH_SUBSHELL ;sleep 2) #子shell ,返回停止2秒

(sleep 2 ; echo $BASH_SUBSHELL ;sleep 2)& #子shell ,返回停止2秒,并置于后台。

#3.协程

#协程可以同时做俩件事。它在后台生成一个子shell。

coproc sleep 20 #使用协程的用coproc命令。

coproc my_copoc { sleep 20; } #使用协程的用coproc命令,给协程起名字 my_coproc ,{}之间有空格;

coproc my_copoc { sleep 20; sleep 10} #使用协程的用coproc命令,给协程起名字 my_coproc ,{}之间有空格,俩个sleep 是把协程和进程放到一起,产生嵌套shell。

#5.3 理解shell的内建命令

#5.3.1 外不命令

#外部命令是文件系统命令

which ps #找到ps的位置

type -a ps #找到ps的位置

ls -l /bin/ps #找到ps的具体信息。

#5.3.2 内建命令

#内建命令不需要像外部命令一样需要shell执行,和shell编译为一体。

type cd #内建

type exit #内建

type -a echo #type -a 显示外部和内部俩种。

which echo #which只显示外部命令文件

#1.使用history命令

history #唤回使用的历史命令

cat .bash_hirstory

histroy -a #-a

!20 #表示取出第20条history命令显示的命令历史集的。

#2.命名别名

alias -p #alias是别名

#第六章 使用Linux的环境变量

#bash shell 中存在俩种环境变量: 全局变量和局部变量

#6.1.1 全局环境变量

evn #查看全局变量

printevn #查看全局变量

printevn home #查看个别环境变量的值用printevn,而不用evn

echo $home #显示home的环境变量

#6.1.2局部环境变量

set #显示某个环境变量的列表,局部和用户环境变量。

#6.2 设置用户定义变量

#6.2.1 设置局部用户定义变量

echo $my_path #局部用户变量

my_path=1 #设置局部用户变量值,局部变量是小写 ,变量名,等号,值之间没有空格。

echo $my_path #显示结果

my_path=‘hello world’

bash #新建shell

echo $my_path

exit #退出新建的shell

echo $my_path #上面定义的shell前的变量值,退出shell后任然可以使用。

my_path=‘hello world’

bash #新建shell

echo $my_path1=‘hello word hello word’

exit #退出新建的shell

echo KaTeX parse error: Expected 'EOF', got '#' at position 9: my_path #̲上面定义的shell前的变量值…my_path任然可以使用。

echo KaTeX parse error: Expected 'EOF', got '#' at position 10: my_path1 #̲上面定义的shell前的变量值…my_path1任然不可以使用。

#6.2.2 设置全局环境变量

#创建全局的环境变量是,先创建局部的环境变量,然后再导入到全局变量中

my_path2=‘wo shi zhao huajie’ #定义局部变量。

export my_path2 #变量前不需要加$号,修改子shell的全局变量不会影响父shell的值。

echo $my_path2

#6.3 删除环境变量

unset my_path #删除变量,在子进程删除全局变量,只对子进程有用,父进程还是没变。

#6.4 默认的shell 环境变量

#6.5 设置path环境变量

echo $PATH #显示shell 查找的命令或者程序

myprog

#6.6定位系统环境变量

#6.6.1 登录shell

#登录shell读取的五个文件

/etc/profile #为主启动文件,系统每个用户登录时都会执行这个启动文件,下面四个是针对用户的,可根据需求定制。

$HOME/.bash_profile

$HOME/.bashrc

$HOME/.bash_login

$HOME/.profile

#1./etc/profile文件

#6.6.2 交互式shell进程

#不是启动系统时候启动的shell 叫交互式shell,它就不会访问/etc/profile文件,只会检查用户目录中的.bashrc文件。

#.bashrc文件的俩个作用,一是查看/etc目录下通用的bashrc文件,二是为用户提供一个制自的已命名和私有的函数脚本。

#6.6.3 非交互式的shell

#6.6.4 环境变量持久化

#6.7 数据变量

mytest=(one two three four five)

echo $mytest #只会显示数组变量的第一个值。

echo ${mytest[2]} #显示数组中的第三个元素。

echo ${mytest[]} #通配符显示所有的元素。

mytest[2]=seven #改变第三个元素的值。

echo ${mytest[]} #显示所有的元素。

unset mytest[2] #删除第三个元素的值。

unset mytest #删除整个数组。

#第七章 Linux文件权限

#7.1.1 /etc/passwd文件

cat /etc/passwd #标准的文本文件

#7.1.2 /etc/shadow文件

cat /etc/passwd #文件对linux系统密码管理提供了更多的控制。

#7.1.3 添加新用户

/usr/sbin/useradd -D #被设置在/usr/default/useradd 文件中,-D是查看默认设置。

useradd -m test #创建test,-m是创建home目录,并将/etc/skel目录中的文件复制过来。

useradd -D -s /bin/tsch #新增用户,-s 更改某些参数到/bin/tsch

#7.1.4 删除用户

/user/sbin/userdel -r test #删除用户test,-r参数之前的/home/test目录就不存在了

#7.1.5 修改用户

#1.usermod

-c #修改备字段

-e #修改过期日期

-g #修改默认的登录组

-l #修改用户账户的登录名字

-L #锁定账户,使用户无法登录

-p #修改账户的密码

-U #解除锁定,使用户能够登录

-L #账户锁定,使用户无法登录,同时无需删除账户和用户数据,要让账户恢复正常,只需要-U选项就可以了。

#2.passwd和chpasswd

passwd #修改密码

#3.chsh,chfn和chage 修改特定的账户信息。

#7.2 使用Linux组

#7.2.1 /etc/group文件

#7.2.2 创建新组

groupadd #可以创建新组

#7.2.3修改组

#7.3 理解文件权限

#7.3.1 使用文件权限符号

#7.3.2 默认文件权限

ls -l #显示文件和目录

#目录的具体信息含义:

#第一个字段

  • #代表文件

    d #代表目录

    l #代表链接

    c #代表字符型设备

    b #代表块设备

    n #代表网络设备

#之后三组三字符的编码,

r #代表对象是可读的

w #代表对象是可写的

x #代表对象是可执行的

#7.4 改变安全性设置

#7.4.1 改变权限

chmod #改变文件和目录的安全设置。

chmod opthions mode file #mode参数可以使用八进制模式或者符号模式进行安全性设置,八进制模式设置非常直观,直接用期望赋予文件的标准3位八进制权限码即可。

chmod 760 newfile #八进制会自动应用到指定的文件上。

#符号模式下指定的权限格式

[ugoa] [±=] [rwxXstugo…]

#第一组定义了权限作用的对象:

u #代表用户

g #代表组

o #代表其他

a #代表上诉所有

#下一步 后面跟着的符号,

  • #表示想在现在权限基础上增加权限
  • #表示想在现有权限基础上移除权限

    = #将权限设置成后面的值

    #最后,第三个符号代表 作用到设置上的权限。除了rwx外还有下面的

    X #如果对象是目录或者它已经有执行权限,赋予执行权限。。

    s #运行时重新设置UID和GID

    t #保留文件和目录

    u #设置属性主权限

    g #设置属组权限

    o #设置其他用户权限

chmod o+r newfile #o+r 是设置读取权限

chmod u-r newfile #u-r 是移除属主的读取权限

#7.4.2 改变所属关系

chown #命令是改变文件的属主

chgrp #改变文件的属组

#格式:

chown option ower[.group] file #可以用登录名字或者UID来确定文件的新属主

chown dan newfile # 改变属主为dan

chown dan.shared newfile #改变属主和属组

chown .rich newfile #改变单个文件的属组

chown test. newfile #如果登录名和属组一样,可以这样写。

chgrp shared newfile #改变属组

#7.5共享文件

------------------------------------------中间缺少的章节后期学习----------------------------------------------------------------------------------

#第八章 管理文件系统

#8.1.1 基本的Linux的文件系统

#1.ext文件系统 ext称为扩展文件系统,不得超过2GB

#2.ext2文件系统 最大是2TB

#8.1.2 日志文件系统

#1.ext3文件系统

#2.ext4文件系统

#3.Reiser文件系统

#4.JFS文件系统

#5.XFS文件系统

#8.1.3写时复制文件系统

#1.ZFS文件系统

#2.Btrf文件系统

#8.2 操作文件系统

#8.2.1 创建分区

fdisk /dev/sdb #创建分区 使用fdisk命令。

#8.2.2 创建文件系统

type mkfs.ext4

type mkfs.btrfs

------------------------------------------中间缺少的章节后期学习----------------------------------------------------------------------------------

#第十章 使用编译器

#10.1 vim编译器

#10.1.1 检查vim软件包

alias vi

alias vi=‘vim’

which vim

#10.1.2 vim编译器

vim myprg.c

#vim编译器的俩种模式

#普通模式

#插入模式 ----按i键进入插入模式,退出插入模式,到普通模式 用ESC键。

ctrl+F #下翻一屏幕

ctrl+B #上翻一屏幕

G #移到缓存区的第一行

num G #移动到缓存区中的第num行

gg #移动到缓冲区的第一行

#在命令模式下有几个命令可以将缓冲区的数据保存到文件中并退出vim

q #如果未修改缓存区数据,退出。

q1 #取消所有对缓冲区数据的修改并退出。

w filename #将文件保存到另一个文件中。

wq #将缓冲区数据保存到文件中并退出。

#10.1.3 编辑数据

#vim编辑命令

x #删除当前光标所在位置的字符

dd #删除当前光标所在的行。

dw #删除当前光标所在位置的单词

d$ #删除当前光标所在位置至末尾的内容。

J #删除当前光标所在行行尾的换行符

u #撤销前一编辑命令

a #在当前光标后追加数据。

A #在当前光标所在行行尾追加数据。

r char #用char替换当前光标所在位置的单个字符。

R text #用text覆盖当前光标所在位置的数据,直接按下ESC键。

#10.1.4 复制和粘贴

y #复制命令。

yw #复制一个单词。

y$ #表示复制到行尾。

p #粘贴数据

10.1.5 查找和替换

/ #按/符号输入对应的查找文件。

#替换命令:

:s/old/new/g #一行命令替换所有old

:n,ms/old/new/g #替换n和m之间的old

:%s、old/new/g #替换真个文件中的所有old

:%s/old/new/g #替换整个文件中的old,但是每次出现提示。

#10.2 nano 编辑器

nano zhj文件 #使用nano做编译器编译文件之类的,有提示符号。

#10.3 emacs 编译器

#10.3.1检查emacs 软件包

which emacs #查看emacs编译器,是一款视图画的软件。

yum list emacs #查看是否有一个包。

yum install emacs #安装emacs文件。

#10.3.2 在控制台中使用emacs

#1.emacs 基础

#2.编辑数据

#3.复制和粘贴

#4.查找和替换

#5.在emacs中使用缓冲区

#6.在控制台模式的emacs中使用窗口

#10.3.3 在GUI环境中使用emacs

#10.4 KDE系编译器

#10.4.1 Kwriter 编译器

#10.4.2 Kate 编译器

#10.5 GNOME 编译器

#10.5.1 启动gedit

gedit zhj #编译器zhj文件。

#10.5.2 基本的gedit功能

#10.5.3 设定偏好设置

#1.设置view偏好

#第二部分 shell 脚本编程基础

#第十一章 构建基本脚本

#使用多个命令

#创建脚本文件

#显示消息

#使用变量

#输入输出重新定向

#管道

#数学运算

#退出脚本

#11.1 使用多个命令

date ; who

#11.2创建shell 脚本文件

#!/bin/bash #脚本指定第一行是什么类型的脚本 #!开头,/bin/bash 为要执行的脚本的类型路径。

这是做什么的脚本 #这句是描述脚本的用意。

date #显示日期命令。

who #显示现在用户。

echo ‘zhe shi yi ge jiao ben test’ #输出一段结果

$echo $PATH #查看环境变量的命令

#要让shell 找见对应创建的脚本,需要以下的方法:

#将shell脚本文件所处的目录添加到PATH环境变量中;

#在提示符中用绝对或者相对的文件路径来引用shell脚本文件;

./test1 #使用绝对或者相对路径执行shell

chmod u+x test1 #给文件赋予权限

#11.3 显示信息

echo ‘xian shi xinxi’

echo -n ‘xian shi xinxi’ #换行-n

#11.4 使用变量

#11.4.1 环境变量

set #环境变量

cat test #显示文件

U I D 、 UID、 UID、USER 、$HOME #用来显示已经登录用户的有关信息。

#11.4.2 用户变量

#11.4.3 命令替换

#!/bin/bash #脚本指定第一行是什么类型的脚本 #!开头,/bin/bash 为要执行的脚本的类型路径。

这是做什么的脚本 #这句是描述脚本的用意。

date #显示日期命令。

who #显示现在用户。

testing=

date

testing1= ( d a t e ) t o d a y = (date) today= (date)today=(date +%y%m%d)#格式化日期赋给变量

echo ‘zhe shi yi ge jiao ben test’ #输出一段结果

date +%y%m%d #格式化日期,注意date后的空格。

ls /usr/bin -al >log.$today #输出结果到这个目录

#11.5 重定向输入和输出

#11.5.1 输出定向

date >test1 #把date显示内容定向保存在test1 ,test1存在覆盖,不存在创建。

date >> test2 #把数据追加到test2 上,不存在test2创建,存在追加数据。

#11.5.2 输入重定向

wc < test1 #wc是对文件的行数,文本的词数,文本的字节数。<符号是输入重定向, test1 的文件内容。

wc << EOF

zhj

EOF #<<是内联输入重定向

#11.6 管道

rpm -qa >rpm.list ;sort <rpm.list #rpm 命令通过Red Hat 包管理系统(RPM)对系统上安装包进行管理,-qa它会生成安装包的列表,但是列表不会遵循某种特定的顺序,sort 对列表对rpm.list排序。

command1 | command2 #将一个命令重新定向到另一个命令中。|符号很重要。

rpm -qa |sort #rpm的输出 sort 直接进行处理,输入和输出进行处理。

rpm -qa |sort|more #三个命令一起用。

#11.7执行数学运算你

#11.7.1 expr命令

expr 1 + 8 #使用此命令对数字进行计算,注意1和8 之间的空格。

expr 1 * 8 #使用此命令对数字进行计算,注意1和8 之间的空格。

expr 1 % 8 #使用此命令对数字进行计算,注意1和8 之间的空格。

expr 1 / 8 #使用此命令对数字进行计算,注意1和8 之间的空格。

expr a | b #使用此命令对数字进行计算,注意1和8 之间的空格,如果a既不是null也不是0值,返回0,否则返回b。

expr a & b #使用此命令对数字进行计算,注意a和b 之间的空格,如果没有参数是null或0值,返回a,否则返回0。

expr a < b #使用此命令对数字进行计算,注意1和8 之间的空格,如果a小于b,则返回1,否则返回0。

expr a <= b #使用此命令对数字进行计算,注意1和8 之间的空格,如果a<=b,则返回1,否则返回0。

expr a != b #使用此命令对数字进行计算,注意1和8 之间的空格,如果a!=b,则返回1,否则返回0。

expr a % b #使用此命令对数字进行计算,注意1和8 之间的空格,返回余数。

expr a : b #如果b匹配到了a的某个模式,返回该模式匹配。

expr match a b #使用此命令对数字进行计算,注意1和8 之间的空格,如果b匹配到了a的某个模式,返回该模式匹配。

expr substr string POS length #返回起始位置为POS(从1开始计算),长度为length个字符的子字符串。

expr index string chars #返回在string中找到chars字符串的位置,否则返回0。

expr length string #返回字符串的长度。

expr + TOKEN #将TOKEN解释成字符串即使是个关键字。

expr (EXPRESSION) #返回EXPRESSION。

#11.7.2 使用方括号

var1=KaTeX parse error: Expected 'EOF', got '#' at position 9: [1 + 5] #̲在bash中,在将一个数学运算…var1 / $var3]

chmod u+x test8 #赋权限给文件。

#11.7.3浮点解决方案

#1.bc 的基本用法

#bash计算器能够识别:数字,变量,注释,表达式,编程语句,函数。

quit #可以退出计算器。

#2.在脚本中使bc

varq=KaTeX parse error: Expected 'EOF', got '#' at position 39: …wei shm' | bc) #̲bc计算机 var3=(echo “scale =4;44/5” | bc)

var4= ( e c h o " s c a l e = 4 ; (echo "scale =4; (echo"scale=4;varr/ v a r t " ∣ b c ) v a r e = vart" | bc) vare= vart"∣bc)vare=(bc << EOF

xian

zai

shi

zuo

shm

EOF

)

vare= ( b c < < E O F s c a l e = 4 a l = ( (bc << EOF scale=4 al=( (bc<<EOFscale=4al=(var1* v a r 2 ) b 1 = ( var2) b1=( var2)b1=(var3*$var5)

a1+b1

EOF

)

#11.8 退出脚本

#11.8.1 查看退出状态码

date

echo $? #查看退出码状态。退出是0。

#11.8.2 exit命令

var3=var1+var2

exit var3 #退出状变量。

$? #查看退出状态码。

#默认情况下,shell 脚本会以脚本中的最后一个命令的退出状态码退出。

./test8

#你可以改变默认的状态行为,返回自己的退出状态码,exit命令允许在脚本结束时指定一个退出状态码。

#!/bin/bash

exit 5

#当查看脚本退出码,你得到作为参数传给exit命令的值。

#!/bin/bash

exit $var

#也可使用变量。

#第十二章 使用结构化命令

#12.1 使用if-then 语句

if pwd

then

echo ‘这是一个if -then-fi’

fi

#12.2 if-then-else 语句

if

then

echo ‘1132212413’

else

echo ‘aafafafafa’

fi

#12.3 嵌套if

if pwd

then

echo ‘zheshi if’

elif who # 只是elif的写法

then

echo ‘zheshi who’

else

echo ‘zheshi else’

fi

#12.4 test命令

test xxx #这是test命令,test列出的成立,test 命令就会退出并返回状态码0,这样if-then语句就可以正常执行了,否则if-then 语句不执行。

if test xxx

then

echo ‘zhe shi test’

elif

echo ‘adasda’

elif

echo ‘adaa’

else

echo ‘2312312’

fi

#12.4.1 数值比较

test a -eq b #检查a和b是否相等。

test a -ge b #检查a是否大于或者等于b。

test a -gt b #检查a是否大于b。

test a -le b #检查a否小于或者等于b。

test a -lt b #检查aa否小于b。

test a -ne b #检查a是否不等于b。

if [ 1 = 2 ] #bash shell 提供了另外一条测试方法,无需再if-then中声明test命令,方括号定义 测试条件,注意第一个方括号之后和第二个方括号前必须加上一个空格。否则会报错

then

echo ‘zfdf’

else

echo ‘adsdaasdas’

#test 命令可以判断比较三类条件:数字比较,字符比较,文件比较。

#12.4.2 字符串比较

#1.字符串相等

#2.字符串顺序

if [ $var1 > $var2 ] #大于号小于号必须转义,否则会被当做重新定向符号。

then

echo ‘zheshi 转义字符’

#sort 和test处理大写字母的方法正好相反。

#sort 认为大写字母大于小写字母。test认为大写字母小于小写字母。

#3.字符串大小

#-n和-z可以检测一个变量是否含有数据。

if [ -n $var1 ] #检测变量是否含有数据,判断val1变量是否长度非0,而他的长度正好非0,所以then部分被执行了。

if [ -z $var2 ] #判断var2的变量长度是否为0,为0,then执行。

if [ -z $var3 ] #判断var3的长度是否为0。 $var3变量在shell脚本中未被定义过,所以字符串长度任然为0,尽管他未被定义过。

#12.4.3 文件比较

test -d file1 #检查file1是否存在并是一个目录。

test -e file1 #检查file1是否存在。

test -f file1 #检查file1是否存在并是一个文件。

test -r file1 #检查file1是否存在并可读。

test -s file1 #检查file1是否存在并非空。

test -w file1 #检查file1是否存在并可写。

test -x file1 #检查file1是否存在并可执行。

test -O file1 #检查file1是否存在并属当前用户所有。

test -G file1 #检查file1是否存在并默认组和当前用户相同。

test file1 -nt file2 #检查file1是否比file2新。

test file1 -ot file2 #检查file1是否比file2旧。

if [ -d zhj ] #上面的使用方法如此

#12.5 符合条件

if [ -f file1 ] || [ -d file2 ] && [ file1 -nt file2 ] #符合使用方法;

#12.6 if-then的高级特性

#12.6.1 使用双括号

#双括号命令允许你在比较过程中使用高级数学表达式。

#if 语句中使用双括号;

if (( $var 2 >90 )) #双括号的实例

#双括号可以使用的命令符号: var++ ,val–,++val,–val,!,-,,<<,>>,&,|,&&,||

#12.6.2 使用双括号

if [[ $user==r* ]]

#12.7 case 命令

case $var in #case的第一步

v a r 1 ∣ var1| var1∣var2) echo ‘只是第一个匹配的信息’;; #|符号分割俩个模式 )括号只有半边。

$var3) echo ‘这是第二个匹配到的信息’;;

*) echo ‘这是默认匹配的信息’;; #*通配符号会捕获所有已知模式。

esac #case结束,写成esac

继续阅读