概述
#遍历目录
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
最后
以上就是勤奋夕阳为你收集整理的shell基础技能第四章 更多的bash shell命令10.1.5 查找和替换这是做什么的脚本 #这句是描述脚本的用意。这是做什么的脚本 #这句是描述脚本的用意。的全部内容,希望文章能够帮你解决shell基础技能第四章 更多的bash shell命令10.1.5 查找和替换这是做什么的脚本 #这句是描述脚本的用意。这是做什么的脚本 #这句是描述脚本的用意。所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复