linux小命令集锦
2016-12-16 16:38
190 查看
本身不是计算机出身,linux命令不如别人用的好,觉得还是不断积累的好,否则每次用都在查,然后在用,效率比较低。
运行脚本时传递给脚本的参数称为命令行参数,用$n表示,请看下面的例子:
运行结果
$*和$@的区别
$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(” “)包含时,都以”1""2” … “$n” 的形式输出所有参数。
但是当它们被双引号(” “)包含时,”∗"会将所有的参数作为一个整体,以"1 2…n”的形式输出所有参数;”@"会将各个参数分开,以"1” “2"…"n” 的形式输出所有参数
2、函数内定义的变量也是全局变量,也就是说函数外可以访问。
3、利用 local 可以声明局部变量,对一个与全局变量同名的局部变量修改不会影响全局变量的值。
4、在函数外不能访问一个局部变量。
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 命令(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 [选项]… 文件…
命令参数
-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]
ctr + r 的使用方法
(reverse-i-search usage: ) 输入任意字符在历史命令中搜索,多按几次 ctrl + r 可以继续向前搜索,然后直接按—>或者回车特殊变量
变量 | 含义 |
---|---|
$$ | 当前shell进程 |
$0 | 当前脚本文件名 |
$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 SSH命令大全
- 开发人员必知的8个常用linux命令
- 11个有用的Linux命令
- Linux系统管理常用命令及参数说明中文版
- Linux系统信息查看常用命令
- 致命的7个Linux命令
- 在PHP中运行Linux命令并启动SSH服务的例子
- Ubuntu 常用命令集
- linux下查找命令汇总(转)
- ctags --- 每天一个 Linux 命令
- Linux 新手必知必会的 10 条 Linux 基本命令
- 在 Linux 下使用 scp 命令
- Linux中文件的压缩与解压缩命令操作示例集锦
- 全面解析Linux的grep命令中正则表达式的用法
- Linux中使用grep命令搜索文件名及文件内容的方法
- Linux中文本处理命令sed的使用示例分享
- 详解Linux系统中su和sudo命令的用法
- 举例讲解Linux下grep命令的精彩使用技巧
- Linux中控制文件权限修改的chgrp和umask命令用法
- Linux中的文件压缩命令tar与rar的用法总结