linux shell笔记

发布时间:2018-12-17  栏目:LINUX  评论:0 Comments

字符串相比

test字符串比较测试
str1=str2 ==
!=  
< len
> len
-n len>0
-z len=0

专门需要小心容易犯错误的地点在符号会跟bash本身的一部分号争辨即便导致执行出错!!!包括:

<,>.

用只要拓展转义,即:

\>,\<.

http://www.bkjia.com/Linuxjc/556784.htmlwww.bkjia.comtruehttp://www.bkjia.com/Linuxjc/556784.htmlTechArticle1、 file
前边没有令,shell会创立一个空文件(长度为0单字符),即使文件此前曾在,其情就是会晤少。
2、一行中而坐键入多漫长命令…

文本于

文件比较功能参数
-d file 存在目录
-e file exist
-f file 存在文件
-r file read
-s file 文件空
-w file write
-x file execute
-O file own
-G file group
file1 -nt file2 new than
file1 -ot file2 old than

哪些简单的拿走条件判断时规格的结果吗?

test 1 \= 1;echo $?

高达句测试,为真正,突显0

留意:test的一定量只参数,不应该当里头总计,而应该当前边的手续完成,否则恐怕相会获错误的结果!!!(亲测)

譬如说:一定是$HOME,所以test -e $HOME 必然为实在(0)。

但是,倘若$HOME中莫存在123目录或文件夹,则test -e $HOME/123仍会回去0.

万一准我形容的注目,写吗x1=$HOME/123;test -e $1;echo
$?则会回来1,即真实了果.

故而一定倘若注意这种情景!

1、> file  
前边没有令,shell会创立一个空文件(长度为0单字符),假设文件在此以前曾在,其情就会少。 
 
2、一行中只是因为键入多漫漫命令,命令中因而分好分隔。 
 
3、即便当键入的命令下与一个&符号,该令就发送至后台执行,也就是说,该令不再占住终端,可以继续处理外干活。 
 
4、$字符是shell的特殊字符,即便$后和一个法定的变量名,shell会管其当作在此处用变量所蕴藏的值来替换的授命。表明式可以写吧$((expression))。 
 
5、shell变量$#,里面存的是令执行遭所键入的参数单数。 
 
6、$*可以引用传递让程序的具有的参数,在参数不确定要参数数目可变的主次中,平常是相当有因而底。 
  
[email protected]
它会叫互换成“$n”,这里[email protected]内外的双双引号是不可或缺的,假若无,变量[email protected]和$*净同。 
 
7、假设一旦让一个主次传递9个以上的参数,不克用$10、$11底形式来博取第10个同今后的参数,要用${n}那种格式。 
 
8、shell自动将最终所执行命令的退状态设置及shell变量$?中。 
    $cp phonebook phone2 
    $echo $? 
    $0 
    0操作成 非0操作战败 
 
9、内部命令test,它用来当if命令中测试相同栽或几乎栽口径,格式为 test
expression。 
    -n string 检测string不也空为真 
    -n string 检测string为空为真 
   test命令的其余一种植格局[expression] 
    -eq 等于 
    -ge 大于等于 
    -gt 大于 
    -le 小于等于 
    -lt 小于 
    -ne 不等于 
   文件判断 
    -d  为目录  
    -e  存在 
    -f  普通文书 
    -r  可读文件 
    -s  长度不也0 
    -w  可写文件 
    -x  可执行文件 
    -L  链接文件 
   逻辑判断  
    !   逻辑非 
    -a  逻辑与 
    -o  逻辑或 
 
10、小括号格式 (  ) 
 
11、else结构 
    if command1 
    then 
       command 
    else 
       command 
    fi 
 
12、内部命令exit 它可立刻停下shell程序的履。exit n 
n为要重回的退出状态,不点名为末段一长条命令的脱离状态。 
 
13、elif结构 
    if command1 
    then 
       command 
    elif command2 
    then 
       command 
    else 
       command 
    fi 
 
14、case结构 
    case value in 
    pat1)  command 
           command 
        … 
           command;; 
 
    pat2)  command 
           command 
        … 
           command;; 
    … 
    patn)  command 
           command 
        … 
           command;; 
    esac 
 
    case语句子被的特殊字符指定匹配情势: 
        ?表示管一个字符 
        *发明示0或几独随机字符一个 
 
15、-x 调试程序选项 
    sh -x 程序名 程序参数 
 
16、空命令  : 
    其目标是呀吗不进行,多用于规范语句 
 
17、&&和||结构 
    &&       假若当外要shell命令的地方写了 command1 && command2
则优先实施command1,假如回去的退出状态为0则行command2;倘诺command1重回的脱离状态不呢0,则超越了command2。 
    ||      
结构效应为大半,区别在唯有当第一长条命令的离状态不呢0时才行第二漫长命令。 
     
   
在这种社团的左右个别边还足以用管道线。假诺就此当左侧,检测的是管道线中最终一长长的命令的淡出状态。 
 
18、for命令 
    for var in  word1 word2 …  wordn/filenames[1-n]/$* 
    do 
        command 
        command 
        … 
    done 
 
19、while命令 
    while command1 
    do  
        command 
        command 
        … 
    done 
while
通常同shift命令共同利用。shift命令使地方变量向下转移(即$n到$n-1),并且$#递减。 
 
20、until命令 
    until command1 
    do 
        command 
        command 
        … 
    done 
跟while格局相反 
 
21、sleep n 程序挂于n秒 
 
22、break n、continue n从循环中剥离 
 
23、PATH 
    PATH是执行命令时shell要摸索的目,那多少个目录相互之间用冒号{:}分隔 
 
24、exec 命令 
    exec program  以新shell代替当前先后 

更尖端的数值标准:(())

(())操作符
val++  
val–  
++val  
–val  
!
~ 按位非
**
<<  
>>  
& 按位与
| 按位或
&& 逻辑与
|| 逻辑或

测试过程被,发现,还辅助广大操作:==,!=,<,>,<=,>=,+,-,*,/.

此外,(())不欲转义以及空格!!!

分区

fdisk 分区;p:呈现基本配备信息;n:new独分区;w:write进设备

mkefs 格式化ext分区;

mke2fs 格式化ext2分区;

mkfs.ext3 格式化ext3分区;

mkfs.ext4 格式化ext4分区;

mkreiserfs 格式化reiserfs分区

jfs_mkfs 格式化jfs分区

mkfs.xfs 格式化xfs分区

mkfs.zfs 格式化zfs分区

mkfs.btrfs 格式化btrfs分区

fsck 检查修复分区
-a:自动检测修复;-A:列有fstab中负有分区,并检测;-C:彰显帮助之文件系统检测时的快慢条(ext2、3);-s:六只文件系统依次检查;

LVM
可以增长两只硬盘到一个卷组(整合为一个大分区也远非问题),可以创立快照,镜像。

如何创立LVM物理卷?使用fdisk
t来改变分区类型(为8e);或利用pvcreate创立,pvdisplay查看创造进度;

vgcreate 创设卷组(为物理卷);例如:vgcreate Vol1
/dev/sda1;vgdisplay查看进度

lvcreate 创制逻辑卷;例如:lvcreate –l 100%FREE –n lvtest
Vol1;lvdisplay查看进度

冷那样还不够!!!还要发出文件系统,如ext4的LVM:mkfs.ext4
/dev/Vol1/lvtest。上述创立了一个ext4类此外逻辑卷lvtest。还要手动挂载:mount
/dev/Vol1/lvtest /mnt/my_partation

LVM的同等堆放管理命令:

vgchange 激活和剥夺卷组
vgremove 删除卷组
vgextend 将物理卷加到卷组中
vgreduce 从卷组中去物理卷
lvextend 扩展逻辑卷的尺寸
lvreduce 减小逻辑卷的轻重

重新高级的字符串条件:[[]](20章)

高档效能:regex,

再高级的规则结构:case

case variable in
pattern1 | pattern2 ) commands1 ;;
pattern3 ) commands2 ;;
*) default commands ;;
esac

test

如何是condition呢?答案是:

test,即if行由command 后边改吗:

test condition

2.shell编程

变量是宽松的定义,任何由字母、数字要生划线组成的文本字符串,长度不超20独。用户变量区分轻重缓急写,所以变量
Var1 和变量 var1 是例外之。

shell编程最精的地点在可打console的输出中取回那多少个输出,并无用,一旦那样做,则好动用shell做其他工作了,只要您可知以console中输出它。

安从shell中落输出的情?两栽形式:

  1. 反倒引号符号;
  2. $();

 例如,使用date命令可以输出当前时光,假若写shell脚本的话,可以通过如下二种写法获取console的date:

1 date=$(date);
2 date=`date`;

字符串尽管统一的话,间接各样引号,而休待+或者其他的操作,如:

str1="string1";
str2="string2";
str3=$str1$str2;

输出或引用一个变量,则好:

echo $str3;

出口重定向:>

在就有些文件被益内容:>>

输入重定向:<

内联输入重定向:<<

管道:|

实在,windows console中也支撑管道.

如,在此之前用more对console的情节举办分页:ls -al |more

既然如此是管道,必然协助多管道,即便可能仅会用到零星只

shell中计算:expr

诸如总结1+2:

expr 1 + 2
#注意上式的空格,运算符间都是有的
表11-1 expr 命令操作符
arg1 |arg2  如果arg1既不是null也不是0,返回arg1;否则arg2
ARG1 & ARG2 如果没有参数是null或零值,返回 ARG1 ;否则返回 0
< 如果 ARG1 小于 ARG2 ,返回 1 ;否则返回 0
<= 如果 ARG1 小于或等于 ARG2 ,返回 1 ;否则返回 0
= 如果 ARG1 等于 ARG2 ,返回 1 ;否则返回 0
!= 如果 ARG1 不等于 ARG2 ,返回 1 ;否则返回 0
>= 如果 ARG1 大于或等于 ARG2 ,返回 1 ;否则返回 0
> 如果 ARG1 大于 ARG2 ,返回 1 ;否则返回 0
+  
 
*  
/  
%  
STRING : REGEXP 如果 REGEXP 匹配到了 STRING 中的某个模式,返回该模式匹配
match STRING REGEXP 如果 REGEXP 匹配到了 STRING 中的某个模式,返回该模式匹配
substr STRING POS LENGTH 返回起始位置为 POS (从 1 开始计数)、长度为 LENGTH 个字符的子字符串
index STRING CHARS 返回在 STRING 中找到 CHARS 字符串的位置;否则,返回
index STRING CHARS 返回字符串 STRING 的数值长度
+ TOKEN 将 TOKEN 解释成字符串,即使是个关键字
(EXPRESSION) 返回 EXPRESSION 的值

用留意,尽可能的管运算符号往日增长转义字符,否则很可能会晤造成expr收到错误!

例如 expr 1 * 2

于是,bash shell为了保和Bourne shell的配合而带有了 expr
命令,但其一样为提供了同一种植更简便方法来执行数学表明式。在bash中,在用一个数学运算结果给予给某个变量时,可以就此比索符和方括号(
$[ operation ] )将数学表明式围起来。

然,就优异有益了,依然1+2,则足以写成:

$[1+2]

倘从不需要考虑空格的题目~~~

这里需要专注的是,bash
shell本身不补助浮点数运算,所以可以使此外的道:

bash计算器:bc;

用bash需要留意,精度(scale)默认为0,所以用装:scale=0

bc本身扶助定义变量

 在本子中以bc:

echo “scale=4;1/2” |bc
# 或
echo “scale=4;print 1/2” |bc

 更好的法门是拔取内联输入重定向(<<):

#!/bin/bash
var1=10.46
var2=43.67
var3=33.2
var4=71
var5=$(bc << EOF
scale = 4
a1 = ( $var1 * $var2)
b1 = ($var3 * $var4)
a1 + b1
EOF
)
echo The final answer for this mess is $var5

## EOF既是输入的开始,又是输入的结束,所以计算没有问题的

本子退出命令:

exit exitCode

查阅退出代码:

echo $?

脱代码意图:

0 命令成功结束
1 一般性未知错误
2 不适合的shell命令
126 命令不可执行
127 没找到命令
128 无效的退出参数
128+x 与Linux信号x相关的严重错误
130 通过Ctrl+C终止的命令
255 正常范围之外的退出状态码

1.为主命令

touch 创设空文件(当然,你也可行使echo >filename)

ln 创设链接符号(急速格局|引用):

  1. 符链接:ln –s
  2. 硬链接:ln

 

区别:

  1. 号链接暴发了一个急速形式,是对源文件之一个链接。
  2. 身残志坚链接是根字节的链接,简单的话,分外给是一个文本,两只公文称,占用同样片扇区,好处是省空间,即便删除一个,只要还有刚连接,这么些文件就仍存在。

ls –i
查看文件inode编号(唯一的,能够确认文件是否为同一个,类似于hash值)

mv 移动|重命名

file 查看文件(文件夹)类型等信息

cat 呈现内容 -n:所有行号 ;-b:有字加行号;-T:不呈现制表符;

more 按页显示;例如:cat xxx |more

tail 查看文件结尾;-n
number(或-number):指定最终几乎举办;-f:追踪,可以动态追踪日志文件。

head 与tail类似,但是没有-f参数

ps 进程

top 展现linux进程(Linux版任务管理器)

kill 干少进程

df 查看硬盘空间

sort 文件内容排序

grep 搜索文本

$BASH_SUBSHELL 子shell检测变量

sleep timeCount(s)

句子结尾加&:后台情势运行

jobs 工作

(command 1;command 2…) 任务列表,可以又执行

coproc 协程(后台有个子shell,执行你的吩咐,同时转一个job)

which 查看命令程序所在地方

history 命令历史记录

  !! 上一个历史命令(省着以提升箭头了)

  !number 第n条历史命令于实施

数值比

例如:

ret=1
if test ret -eq 1
then
    echo ret is 1
fi

有关里面的-eq,则是判标准的同栽模式:等于。

test 命令的数值比效益

说明

等效

n1 -eq n2

==

=

-ge

>=

>=

-gt

>

<

-le

<=

<=

-lt

<

<

-ne

!=

!=

test的其它一样栽写法是:

[ condition ]
#注意方括号都和condition有空格的!!!

比如说,将test子例改写一下,即:

ret=1
if [ ret -eq 1 ]
then
    echo ret is 1
fi

test可以做:

 数值相比
 字符串相比
 文件于

 更多的结构化:for

for var in list
do
commands
done

地点所说的list,其实可以是字符串(每个码为空格分开,倘诺想避免起中起空格,则足以吗每个项加一对准引号,假使以在引号,最好转义,用别样一样栽引号次的)。

如上所述,这么些for用着依然没有编程语言的便利,假诺想举办100糟某些命令,那么要特别成一个怀有100项之列表。

for star in $(ls)
 do 
    echo "111 $star"
done

 

 条件结构:if,then,elif,fi

if command
#注意是command不是condition!
then
  commands
elif command
then
      commands
...
else
  commands
  ...
  if command
  then
    commands
  fi
fi
#或
if command;then
  commands
fi

重复多之规范:

&&,||

环境

printenv 查看环境变量(env只好查看有的全局变量);
本命令扶助查看有条变量(不需加泰铢符号,echo需要)

set 查看|设置环境变量

export
到处变量为全局变量,就可以于各类shell中动用了(并无克使shell的父shell环境变量暴发变化)

unset 删除环境变量

passwd (chpasswd) 密码查看|修改

umask 为文件分配默认权限

chmod 更改权限

chown 改变归属权

留下评论

网站地图xml地图