linux命令行
重定向 : 标准输出 >. >>
ls > file_list.txt : 在此示例中,ls
执行命令并将结果写入名为 的文件中file_list.txt
。由于 的输出ls
被重定向到文件,因此显示屏上不会出现任何结果.
ls >> file_list.txt : 附加结果时,新结果将添加到文件末尾,从而使每次重复命令时文件变得更长。如果当我们尝试附加重定向输出时该文件不存在,则会创建该文件.
标准输入<
sort < file_list.txt : 在上面的示例中,我们使用sort
命令来处理file_list.txt
.由于标准输出未重定向,因此结果输出在显示屏上
sort < file_list.txt > sorted_file_list.txt : 将标准输出重定向到另一个文件.
管道 |
ls -l | less : 命令的输出ls
被输入到less
.
常与管道结合使用的过滤器是:如ls | head输出的是:
echo
echo this is a test : 表示在标准输出上打印文本参数.
echo D* : 表示打印出D开头的内容.
echo [[:upper:]]* : 表示打印出大写字母开头的内容.
算数扩展 $
echo $((2+2)) : 输出结果是4.
echo $(((5**2)*3)) : 输出5的平方乘以3的结果.
Brace Expansion { }
[me@linuxbox me]$ echo Front-{A,B,C}-Back
Front-A-Back Front-B-Back Front-C-Back
以上从大括号模式创建多个字符串.
[me@linuxbox me]$ echo Number_{1..5}
Number_1 Number_2 Number_3 Number_4 Number_5
{1…5}是从1到5.
[我@linuxbox我]$ mkdir Photos
[我@linuxbox我]$ cd Photos
[我@linuxbox照片]$ mkdir {2017..2019}-{01..12}
[我@linuxbox照片]$ ls
2017-01 2017-07 2018-01 2018-07 2019-01 2019-07 2017-02 2017 -08 2018-02 2018-08 2019-02 2019-08 2017-03 2017-09 2018-03 2018-09 2019-03 2019-09 2017-04 2017-10 2018-04 2018-10 2019-04 2019年10月2017-05 2017-11 2018-05 2018-11 2019-05 2019-11 2017-06 2017-12 2018-06 2018-12 2019-06 2019-12
file
作用:查看文件类型.
命令替换 $
命令替换允许我们使用命令的输出作为扩展,即:
[me@linuxbox me]$echo $(ls)
桌面文档 ls-output.txt 音乐 图片 公共模板 视频
[me@linuxbox me]$[me@linuxbox ~]$ echo The total is $100.00
总计 00.00
参数扩展用空字符串替换了$1的值,因为它是一个为定义的变量.
双引号 “”
如果把文本放在双引号内,则shell使用的所有特殊字符都会失去其特殊含义并被视为普通字符,但参数扩展、算数扩展和命令替换仍然发生在双引号内:
[me@linuxbox me]$ echo "$USER $((2+2)) $(cal)"
me 2020年2月4日 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
反斜杠 \
在双引号下起作用,如\n可以换行.
权限
第一个字符是指示文件类型的,后面分别表示所有者、组和其他人的读写执行权限.
例如,执行如下代码可以得到:
[me@linuxbox me]$ ls -l /bin/bash
-rwxr-xr-x 1 root root 1113504 2019年6月6日 /bin/bash
- 文件由root用户拥有;
- 超级用户有读写执行的权限;
- 该文件归root组所有;
- root组的成员可以读取执行文件;
- 其他人都能读取执行文件.
chmod
利用chmod可以更改文件或目录的权限.(e.g.chmod 600 a.txt)也即7:rwx;6:rw-;5:r-x;4:r–;0:—
创建脚本
首先用命令vim hello_world创建一个脚本,然后用chmod 755修改改脚本的权限,因为刚创建的脚本没有执行的权限,然后用命令./hello_world执行该脚本.
别名(alias)
alias l = ‘ls -l’ : 通过将alias命令添加到文件中,我们创建了一个名为“l”的新命令
此处脚本(here script)
command<<用作命令的标准输入标记的标记内容.(此处可以是任意的)
_EOF_(end of file的缩写)
可以用title =“My system” , $title来达到替换My system的目的.(不允许有等号)
查看环境中的所有变量printenv。
双引号的目的之一是为了防止包含空格字符时出现不必要的单词分割.
存根函数
如果我们没有完成某个函数的所有细节,我们会添加echo如下命令:
system_info() { # 临时函数存根
echo"function system_info" }
这样的话,即使我们没有完成system_info函数,我们的脚本仍然会执行。使用echo的原因是我们从脚本中得到一些反馈来表明函数正在执行.
uptime
该函数将显示:系统自上次重新启动以来“启动”(运行)的时间长度、用户数量和最近的系统负载.
$?
$?用来存储上一个命令的退出状态码,当一个命令执行完毕后,他会返回一个退出状态码,用来表示该命令执行的结果或者状态.例如:
[我@linuxbox~]$ true
[我@linuxbox~]$ echo $?
0 [我@linuxbox~]$ false
[我@linuxbox~]$ echo $?
1
if
- 命令终止时会向系统发送一个值,称为退出状态。该值时0到255之间的整数,0表示成功,其他值表示失败.
- fi是shell脚本中用于结束if语句块的关键字.
- 同时true代表1,所以if true就是if 1.
测试
if [-f .bash_profile ]; then
echo“你有一个 .bash_profile。一切都很好。”
else
echo“哎呀!你没有 .bash_profile!”
fi
表达式"-f .bash_profile"表示询问".bash_profile"是一个文件吗?
其次第一行代码中的分号,它是命令分隔符,使用它可以在一行上放置多个命令.
根测试
id命令可以告诉我们当前用户是谁,当使用-u选项执行时,它会打印当前用户的数字用户ID.
$
1:在Shell脚本中,$
用于引用变量的值。例如,$VAR
表示变量VAR
的值。
2:$()
(或反引号````)用于执行命令并将其输出作为字符串返回。例如,`$(date)`将执行`date’命令并返回其输出。
3.环境变量:一些特殊的环境变量,如$HOME
表示用户的主目录,$PATH
表示可执行文件的搜索路径等。
find查找文件名
find ~/CNN -name “a.txt” : 表示在~/CNN目录下查找a.txt。-name表示要查找的文件名模式.
find $FOAM_SRC -name “*slip” : 表示在环境变量FOAM_SRC下查找以slip结尾的文件.其中FOAM_SRC指向OpenFOAM的源代码路径.