shell基础技能

#遍历目录
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、 UIDUSER 、$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| var1var2) echo ‘只是第一个匹配的信息’;; #|符号分割俩个模式 )括号只有半边。
$var3) echo ‘这是第二个匹配到的信息’;;
*) echo ‘这是默认匹配的信息’;; #*通配符号会捕获所有已知模式。
esac #case结束,写成esac

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值