菜单

linux shell笔记

2018年12月16日 - LINUX

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修历史命令于执行

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代替当前程序 

环境

printenv 查看环境变量(env只可以查看所有的全局变量);
本命令援助查看有修变量(不需要加美金符号,echo需要)

set 查看|设置环境变量

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

unset 删除环境变量

passwd (chpasswd) 密码查看|修改

umask 为文件分配默认权限

chmod 更改权限

chown 改变归属权

http://www.bkjia.com/Linuxjc/556784.htmlwww.bkjia.comtruehttp://www.bkjia.com/Linuxjc/556784.htmlTechArticle1、 file
前边没有令,shell会成立一个拖欠文件(长度为0独字符),假使文件从前都存在,其情节即相会丢。
2、一行中不过因键入多少长度达命令…

分区

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 减小逻辑卷的尺寸

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 正常范围之外的退出状态码

 条件结构: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

test

如何是condition呢?答案是:

test,即if行由command 前面改也:

test condition

数值比

例如:

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可以做:

 数值比
 字符串比较
 文件较

字符串相比

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

专程要专注容易犯错误的地点在于符号会及bash本身的组成部分标记争论而招致执行出错!!!包括:

<,>.

就此若拓展转义,即:

\>,\<.

文本于

文件比较功能参数
-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,即真实了果.

就此毫无疑问要留心这种场所!

双重多的格:

&&,||

再高级的数值标准:(())

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

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

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

重新尖端的字符串条件:[[]](20章)

高档效能:regex,

再也高级的尺度结构:case

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

 更多之结构化:for

for var in list
do
commands
done

点所说之list,其实能够是字符串(每个件为空格分开,假设想制止起中生空格,则可以吧每个项加一针对引号,就算又是引号,最好转义,用任何一样种引号次的)。

由此看来,这多少个for用在仍旧不曾编程语言的有益,即使想举办100涂鸦某些命令,那么需要充足成一个有100桩之列表。

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

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图