您的位置:首页 > 运维架构 > Linux

linux小命令集锦

2016-12-16 16:38 190 查看
本身不是计算机出身,linux命令不如别人用的好,觉得还是不断积累的好,否则每次用都在查,然后在用,效率比较低。

ctr + r 的使用方法

(reverse-i-search usage: ) 输入任意字符在历史命令中搜索,多按几次 ctrl + r 可以继续向前搜索,然后直接按—>或者回车

特殊变量

变量含义
$$当前shell进程
$0当前脚本文件名
$n传递给脚本或者函数的参数
$#传递给脚本或者函数的参数的个数
$*传递给脚本或者函数的所有参数
$@传递给脚本或者函数的所有参数
$?上个命令的退出状态
运行脚本时传递给脚本的参数称为命令行参数,用$n表示,请看下面的例子:

#!/bin/bash

echo "File Name: $0"
echo "First Parameter : $1"
echo "First Parameter : $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"


运行结果

$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2


$*和$@的区别

$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(” “)包含时,都以”1""2” … “$n” 的形式输出所有参数。

但是当它们被双引号(” “)包含时,”∗"会将所有的参数作为一个整体,以"1 2…n”的形式输出所有参数;”@"会将各个参数分开,以"1” “2"…"n” 的形式输出所有参数

shell函数的全局变量和局部变量

1、函数内是可以访问全局变量,并且对全局变量的修改会真正改变全局变量的值。

2、函数内定义的变量也是全局变量,也就是说函数外可以访问。

3、利用 local 可以声明局部变量,对一个与全局变量同名的局部变量修改不会影响全局变量的值。

4、在函数外不能访问一个局部变量。

( ) 与 $(( )) 与 $( ) 还有${ }的区别

1、在 bash shell 中, 与 ` `(反引号) 都是用来做命令替换用;并且$( )相对更直观

2、${ } 用来作变量替换,一般情况下,$var 与 ${var} 并没有啥不一样。但是用 ${ } 会比较精确的界定变量名称的范围;还可以用来替换获得不同的值,例如file=/dir1/dir2/dir3/my.file.txt

${file#*/}:拿掉第一条 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt

${file##*/}:拿掉最后一条 / 及其左边的字符串:my.file.txt

${file#*.}:拿掉第一个 . 及其左边的字符串:file.txt

${file##*.}:拿掉最后一个 . 及其左边的字符串:txt

${file%/*}:拿掉最后条 / 及其右边的字符串:/dir1/dir2/dir3

${file%%/*}:拿掉第一条 / 及其右边的字符串:(空值)

${file%.*}:拿掉最后一个 . 及其右边的字串:/dir1/dir2/dir3/my.file

${file%%.*}:拿掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my

${#file} 可得到 27

${file:0:5}:提取最左边的 5 个字节:/dir1

${file:5:5}:提取第 5 个字节右边的连续 5 个字节:/dir2

我们也可以对变量值里的字符串作替换:

${file/dir/path}:将第一个 dir 提换为 path:/path1/dir2/dir3/my.file.txt

${file//dir/path}:将全部 dir 提换为 path:/path1/path2/path3/my.file.txt

利用 ${ } 还可针对不同的变量状态赋值(没设定、空值、非空值):

${file-my.file.txt} :假如 $file 没有设定,则使用 my.file.txt 作传回值。(空值及非空值时不作处理)

${file:-my.file.txt} :假如 $file 没有设定或为空值,则使用 my.file.txt 作传回值。 (非空值时不作处理)

${file+my.file.txt} :假如 $file 设为空值或非空值,均使用 my.file.txt 作传回值。(没设定时不作处理)

${file:+my.file.txt} :若 $file 为非空值,则使用 my.file.txt 作传回值。 (没设定及空值时不作处理)

${file=my.file.txt} :若 $file 没设定,则使用 my.file.txt 作传回值,同时将 $file 赋值为 my.file.txt 。 (空值及非空值时不作处理)

${file:=my.file.txt} :若 $file 没设定或为空值,则使用 my.file.txt 作传回值,同时将 $file 赋值为 my.file.txt 。 (非空值时不作处理)

${file?my.file.txt} :若 $file 没设定,则将 my.file.txt 输出至 STDERR。 (空值及非空值时不作处理)

${file:?my.file.txt} :若$file 没设定或为空值,则将 my.file.txt 输出至 STDERR。 (非空值时不作处理)

3、()用法:A=”a b c def” 这样的变量只是将 A替换为一个单一的字符串,但是改为A=(abcdef),则是将$A定义为数组;$A[@]或{A[*]} 可得到 a b c def (全部组数)

${A[0]} 可得到 a (第一个组数),${A[1]} 则为第二个组数…

${#A[@]} 或 ${#A[*]} 可得到 4 (全部组数数量)

${#A[0]} 可得到 1 (即第一个组数(a)的长度),${#A[3]} 可得到 3 (第四个组数(def)的长度)

A[3]=xyz 则是将第四个组数重新定义为 xyz …

4、$(( )) 的用途

$ a=5; b=7; c=2

$ echo ((a+b∗c))等价于$((a + b∗c))

shift命令

位置参数可以用shift命令左移。比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1、$2、$3丢弃,$0不移动。不带参数的shift命令相当于shift 1

测试 shift 命令(x_shift.sh)

until [ $# -eq 0 ]

do

echo “第一个参数为: 1参数个数为:#”

shift

done

执行以上程序x_shift.sh:

$./x_shift.sh 1 2 3 4

结果显示如下:

第一个参数为: 1 参数个数为: 4

第一个参数为: 2 参数个数为: 3

第一个参数为: 3 参数个数为: 2

第一个参数为: 4 参数个数为: 1

touch

命令格式

touch [选项]… 文件…

命令参数

-a 或–time=atime或–time=access或–time=use  只更改存取时间。

-c 或–no-create  不建立任何文档。

-d  使用指定的日期时间,而非现在的时间。

-f  此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。

-m 或–time=mtime或–time=modify  只更改变动时间。

-r  把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。

-t  使用指定的日期时间,而非现在的时间。

例1:

创建不存在的文件:touch log2012.log log2013.log

例2:

更新file2的时间,与file1时间戳相同:touch -r file1 file2

例3:

设置文件时间戳:touch -t 201211142234.50 file

时间戳格式:[[CC]YY]MMDDhhmm[.SS]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux命令