learn shell

the basic shell skills.

  • Bourne shell
    • sh
    • ksh
    • Bash
    • psh
    • zsh
  • C shell
    • csh
    • tcsh

[root@bogon temp]# cat /etc/shells

/bin/sh

/bin/bash

/sbin/nologin

/usr/bin/sh

/usr/bin/bash

/usr/sbin/nologin

/bin/tcsh

/bin/csh

1.echo

[root@bogon temp]# echo "hello world!"

-bash: !": event not found

[root@bogon temp]# echo 'hello world!'

hello world!

2.sh

sh script must declare #!/bin/bash at the begining

you'd better show note 

[root@bogon sh]# cat -A hello.sh

#!/bin/bash$

#Ryan$

$

echo "Hello World"$

cat -A will print all character include \n. You can see, my script hava a $, this is the \n in linux, if in windows, it will be ^M$, you have to run dos2unix to convert it.

3.Basis

3.1.history

show the history command you had typed

history

!n --execute the num n

!!  --execute the laste , acturelly, we use ↑

3.2.alias

[root@bogon sh]# alias

alias cp='cp -i'

alias egrep='egrep --color=auto'

alias fgrep='fgrep --color=auto'

alias grep='grep --color=auto'

alias l.='ls -d .* --color=auto'

alias ll='ls -l --color=auto'

alias ls='ls --color=auto'

alias mv='mv -i'

alias rm='rm -i'

alias vi='vim'

alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

3.3 shortcuts

ctrl+A     move to line start

ctrl+E     move to line end

ctrl+C     stop

ctrl+L     clean

ctrl+U   delete the command before the cursor

ctrl+K    delete the command after the cursor

ctrl+Y     paste the command that you ctrl+U/K

ctrl+R     search from history

ctrl+D     exit

ctrl+Z     suspend and background

4.command

ls -a /etc/ | more

grep 

-i ingnore case

-n show linenum

-v negate

var

  • =bothends can't be space
  • $var_name, ${varname}
  • `` ==$()

envrionment

parent-shell->sub-shell

export var_name=var_value

env

unset var_name

source profile, . ./profile

  • /etc/profile
  • /etc/profile.d/*.sh
  • ~/.bash_profile
  • ~/.bashrc
  • /etc/bashrc

?

one

*

any

[]

the char inside[]

[-]

the char in the range of [-]

[^]

the  opposite char

''

anything is char

""

double quotation, specific char like "$"、"`"、"\"

``

==$()

$()

command to be var

#

note

\

transfferred meaning

var position

$n

$0-command itselt; $1-$9 the attr after command; beyond 10 ${10}

$*

all attrs as a attr

$@

all attrs as attrs

$#

the sum of attrs

$?

the status of the last command : 0? correct:error

$$

current PID

$!

last PID in backgroud

read -t 30 -p "please input somethind :"  sm

echo $sm

caculate num

  • declare -i cc=$aa+$bb
  • dd=$(expr $aa + $bb)
  • ff=$(($aa+$bb))

regular

*

behind char any times

.

one char

^

begin

$

end

[]

any inside char

[^]

can be inside char

\

transfer

\{n\}

n times behind. [0-9]\{4\}  ~ 1234; [1][3-8][0-9]\{9\} ~ tel

\{n,\}

at least n times

\{n,m\}

at least n times and at most m times

.*

any char any times

\.$

end with .

output

command >file         cover

command >>file       append

err command 2>file

err command2>>file

command>file 2>&1

command  &>> file

char cut

cut

-d seperator

-f the index

[root@00:09:13 /temp/project/sh]$ cut -d ":" -f 1,3 /etc/passwd

root:0

bin:1

[root@00:13:16 /temp/project/sh]$ cat /etc/passwd | grep /bin/bash | grep -v root | cut -d ":" -f 1,3

amandabackup:33

ryan:1000

yue:1001

yangmi:1002

bimm:1003

cangls:1004

st:1005

printf

%ns:      n char

%ni:       n num

%m.nf     12.34

awk

 awk [POSIX or GNU style options] -f progfile [--] file ...

[root@00:24:15 /temp/project/sh]$ cat stu.txt

name    age aa   

mrf    12    bb

ryan    18    vv

[root@00:24:31 /temp/project/sh]$ awk '{printf $2 "\t" $3 "\n"} ' stu.txt

age    aa

12    bb

18    vv

[root@00:24:33 /temp/project/sh]$ df -h | awk '{print $1 "\t" $5 "\t" $6}'

[root@00:29:04 /temp/project/sh]$ df -h

文件系统                 容量  已用  可用 已用% 挂载点

/dev/mapper/centos-root   50G  5.3G   45G   11% /

devtmpfs                 1.6G     0  1.6G    0% /dev

tmpfs                    1.6G     0  1.6G    0% /dev/shm

tmpfs                    1.6G  9.0M  1.6G    1% /run

tmpfs                    1.6G     0  1.6G    0% /sys/fs/cgroup

/dev/mapper/centos-home  278G   37M  278G    1% /home

/dev/sda6                497M  162M  335M   33% /boot

tmpfs                    327M     0  327M    0% /run/user/0

[root@00:29:12 /temp/project/sh]$ df -h | grep root | awk '{print $5}' | cut -d "%" -f111

sed

change the file line2

sed -i '2c theReplaceMsg'  file

p     printf

d     delte

a     append

 i     insert

c     replace   line

s     sed 'ns/old/new/g' file

if

[root@bogon sh]# [ "$aa"=="$bb" ] && echo yes || echo no

yes

-n var_name      if var_name!=null return true

-z  var_name      if var_name==null return true

! var_name     opposite  

if [    ]  ;then

  ....

elif [    ]

     then

     ...

else

     ...

fi

or

if [   ]

     then

.....

fi

case

case $var_name in

     val1)

          ...

          ;;

     val2)

          ...

          ;;

     *)

          ...

          ;;

 esac

for

for var_name in val1 val2 val3 ...

     do

          ..

     done

while

while [  $i -le 100    ]

     do

          ...

     done

5.Other

ps

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

root         1  0.0  0.1  41632  4060 ?        Ss   5月13   0:12 /usr/lib/systemd/systemd --switched-root --system --deserialize 21

root         2  0.0  0.0      0     0 ?        S    5月13   0:00 [kthreadd]

root         3  0.0  0.0      0     0 ?        S    5月13   0:05 [ksoftirqd/0]

root         7  0.0  0.0      0     0 ?        S    5月13   0:00 [migration/0]

root         8  0.0  0.0      0     0 ?        S    5月13   0:00 [rcu_bh]

root         9  0.0  0.0      0     0 ?        S    5月13   0:00 [rcuob/0]

root        10  0.0  0.0      0     0 ?        S    5月13   0:00 [rcuob/1]

root        11  0.0  0.0      0     0 ?        S    5月13   0:00 [rcuob/2]

root        12  0.0  0.0      0     0 ?        S    5月13   0:00 [rcuob/3]

root        13  0.0  0.0      0     0 ?        S    5月13   4:18 [rcu_sched]

top

kill

kill -1  restart

kill -9  pid  (force)

kill 15  pid  (default)

crond

crontab -e

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员的酒和故事

libphonenumber--windows上编译libphonenumber.lib以及使用(C++、VS2015)

再介绍一个谷歌的,自带光环的库–libphonenumber. 虽然这个库是用c++写的,但是我们在网络上很少见到在C++开发中使用这个库,或是说在window...

51410
来自专栏编程之路

IOS Swift和OC混合开发--OC项目中使用Swift开发的方法

2181
来自专栏乐沙弥的世界

MySQL "Bind on TCP/IP port: Address already in use"

   最近在已部署MySQL Enterprise Monitor的服务器上新增了MySQL实例,导致MySQL Enterprise Monitor异常宕机...

971
来自专栏圣杰的专栏

ABP入门系列(21)——切换MySQL数据库

源码路径:Github-LearningMpaAbp 1. 引言 Abp支持MySql已经不是什么新鲜事了,但按照官方文档:Entity Framework...

2499
来自专栏搜云库

Spring Boot 中使用 MyBatis 整合 Druid 多数据源

本文将讲述 spring boot + mybatis + druid 多数据源配置方案。 环境 CentOs7.3 安装 MySQL 5.7.19 二进制版本...

3117
来自专栏猿天地

spring cloud gateway 全局过滤器

全局过滤器作用于所有的路由,不需要单独配置,我们可以用它来实现很多统一化处理的业务需求,比如权限认证,IP访问限制等等。

6222
来自专栏Kubernetes

containerd源码分析

本文是对containerd v0.2.4的源码分析。 ##Containerd源码流程图 ? 源码接口调用详情 从ctr调用containerd-api #...

6227
来自专栏Pythonista

Mac下安装ipython

1322
来自专栏小白安全

WinPayloads:一个可以绕过安全检查的Windowspayload生成器

今天给大家介绍的是一款名叫WinPayloads的Payload生成器,这款工具使用了metasploits meterpreter shellcode,它不...

2949
来自专栏游戏杂谈

【转】Itunes Connect新版本如何提交应用

5) Enter the following new iOS app information:     a) Company Name: If this...

1374

扫码关注云+社区