linux shell基础知识

来源:互联网 发布:恩典壁纸软件 编辑:程序博客网 时间:2024/05/22 01:35

单引号、双引号和反引号

单引号不会去视图改变引用的东西,但是双引号会,反引号主要是命令方面的问题

举个例子:var=123   给变量赋值为123

var2='{$var}'123

echo  $var2

var2={$var}123  单引号不会改变引号里面的值


假设换成了双引号

var=123

var2="{$var}"123

echo $var2

var2=123123   双引号会把那个变量里面的东西装进去。


反引号

假设有一个命令ls

var=`ls`

echo $var //这样就相当于执行了ls命令


$()  ===   $``,可以用小括号来代替单引号

var=$(ls)和var=`ls`效果一样,都是将ls执行的值赋给var变量

echo $(var),这里会显示出来

========================================================================================================

查看MAC地址的命令:ifconfig | grep HWaddr


cut命令切割,cut  -d' ' -f2 :-d表示用什么来作为分隔符,-f2表示显示第二列。类似awk命令,列编辑,awk  '{print  $2}',显示第二列,awk默认以空格作为分隔符。

sort命令会按照ASCII码来排列,比如杂乱排序打头的a z  k 之类,通过sort就会a  k  z这样排序。

uniq:是去重复的意思,就是去掉重复的行。


统计用的最多十个命令:

history |awk '{print $2}' |sort|uniq -c|sort -nr|head

sort -nr:表示从大到小来排列。

sort -n:表示从小到大来排列

head表示取出前面十个。


别名:alias

unalias:取消别名


alias  ‘ls  -l’:这里只能用单引号,如果用双引号的话,会解析引号里面的内容。


任何情况下,输入cd都会回到家目录,想要让alias别名永久生效,可以到家目录下面的/etc/profile这个文件里面加一行laias ...

首先在你的当前目录下面输入cd命令,然后回车,然后在/etc/profile文件里加入alias  'll=ls -l'这样就永久生效了。但是一般不写在这个文件里面,而是写到

.bashrc文件。初始化本地的时候,就会加载.bashrc文件。

改完以后要source一下,source  .bashrc。


halt:关机命令


script -a action.log -t 2>time.log

script -a记录当前录制的命令,-t表示记录的时间点

2:表示这个命令从标准错误输出重定向到time.log


按ctrl+d退出录制。

录制出来的存放在action.log 和time.log


scriptreplay time.log action.log通过这个命令来播放刚才录制的操作过程,当看到exit就表示播放结束了。


expr  1+2

a=1

b=2

expr  $a + $b

expr  $a \* $b

expr  $a  /  $b


a=1

let  a=a+1 让a=a+1


echo   $[1+2]

c=$[1+2]

echo $c


echo $((1+2)) (())速度是最快的,内置命令

echo $((1*2))


echo 1+2+3|bc //bc是一个计算器,只能接受从管道里流出来的

双括号计算是最常用的:echo   $(($a+$b))和echo $[$a+$b]


shell产生随机数:

echo  $RANDOM


循环10000次,打印伪随机数,将输出结果重定位到1.txt文件当中

for  i  in `seq  10000` ;  do echo   $RANDOM  >> 1.txt;done

打印1.txt文件当中长度小于等于3的数,wc  -l统计多少行

cat 1.txt | awk '{if(length($0)<=3) print}' | wc -l


随机生成0-9的随机数,模10,取出来肯定是0-9

echo $((RANDOM%10))    echo $[RANDOM%10]


随机生成数字和字母组合的随机数,并且取出随机数前面六位

echo  $RANDOM|md5sum|cut  -c  1-6


查看字符串的长度:echo  ${#a},这样查看字符串a的长度


ctrl+z:暂停脚本运行

ctrl+c:终止命令

fg:暂停的任务恢复到前台来执行

bg:暂停的任务到后来的执行

jobs:查看当前有几个任务暂停了,有几个任务在工作


fg  %1:第一个脚本前台执行。


a.sh脚本

#!/bin/sh -
for i in `seq 100`
do
        echo "script is running"
        sleep 1
done


假设在编辑一个文件,要去查看一些man手册,可以使用ctrl+z来暂停这个进程,就会回到桌面,然后输入fg又会回到编辑模式。


小括号问题:

a=123  变量a的值是123

(echo  $a)  子shell中a的值也是123

(a=abc) 子shell中的a的值是abc


双小括号:可以求值,比如 echo   $((1+2)),将打印3


花括号:不存在子shell的问题,比如要创建九个文件。可以用花括号:touch  test{01..09}。相当于一个序列

使用花括号快速备份:cp   smb.conf{,.bak}


中括号:假设查看文件test1  test2  test3,可以使用中括号选择范围:ls  test[1-3]  -l


shell的内置变量都是大写的。

$RANDOM   $PATH  $LANG  

$?:上一个命令执行成功了,$?为0,否则为非0


ping  -c  4  "www.baidu.com"执行4次

$? 为0,表示执行成功了


现在的标准输出是/dev/null这个空洞文件,2>&1,就是表示标准错误输出重定向到/dev/nul里面

ping   - c  4   www.baidu.com  > /dev/null    2>&1


which  ls找到ls命令在哪里


利用cat写入文件命令:

ca t  >>  pwb.txt  << EOF

>.......

>.......

>EOF 读到与上面那个标记符一样的就退出


tr命令:

tr      '  '    '\n' tr是将空格转换成换行

tr  '2'   '0',把2换成0


统计文件中有多少个1111

^1111$,以1111打头的

cat   abc.txt|tr   '   '     '\n'    |grep   ^1111$|wc   -l

cat  abc.txt  |  grep   -o   "1111"    -o表示输出的意思,只匹配1111


cut  -d'  '按照空格来切割,-f2打印第二列。

cat   temp  |  cut   -d'  '  -f2


tac命令和cat命令类似,输出的结果会反过来。

比如cat  输出的结果是:

12 23

12 34

11 21

而tac的结果是:

11 21

12 34

12 23


^$分别是什么开头,什么结尾,中间什么都不加表示空格

grep   -v  ^$,反向选择,就是过滤掉空行。


cat  -n  显示行号。


取出IP地址

ip=$(ifconfig ens33|grep "inet addr"|cut -d':' -f2|cut -d' ' -f1)


使用awk来过滤,awk  -F指定冒号或者空格为分隔符,[  :]+后面那个加号表示多个,就是多个空格也是分隔符,在后面就是打印第四列

ip=`ifconfig ens33|grep "inet addr"|awk -F'[ :]+'   '{print $4}'`