Shell

  • Shell是一个程序,用户输入的命令通过shell来传达给内核或其它程序。用户在linux打开一个终端,终端就会自动调用用户的shell.
  • Linux上的Shell有很多种,用的最多是shell是bash, 全路径是 /bin/bash. 每个用户的shell可以不一样,具体配置放在 /etc/passwd文件种。

Bash

  • echo $PATH 显示linux的环境变量,$用来引用一个变量,bash执行命令的时候就是去PATH指定的路径种寻找的。
  • export test="hello world" 使用export声明一个变量。
  • 按一次TAB键会尝试补全命令,连按两次TAB键则会列出所有相关的命令。
  • history 20 列出最近执行过的20条命令。

常见目录

  • /usr 存放从软件源中安装的软件
  • /usr/local 存放其它地方安装的软件。
  • /bin , /usr/bin , /usr/local/bin 存放普通用户可以执行的程序或命令。
  • /sbin, /usr/sbin, /usr/local/sbin 存放root用户可以执行的程序和命令。
  • /home 用户家目录的根目录
  • ~ 用户家目录
  • ./tmp 当前目录下的tmp目录。 点表示当前目录。

帮助命令

  • man ls
  • more ls 可以通过enter键向下翻页,翻到最后一页自动退出。
  • less ls 可以上下翻页。
  • 以上命令可通过按q 键退出。

管道符

ps -A|more ps命令的输出作为more命令的输入。

通配符

  • Linux的通配符一般都由bash来处理。
  • 例如 cp *.jpg ./tmp 则bash会先将*.jpg 解析成a.jpg b.jpg ... 然后再传给 cp来处理。
  • cp \*.jpg ./tmp 文件名本身是 *.jpg 则要使用转义符 \。
  • * 代表任意多个任意的字符, ? 代表任意一个字符。

常用命令

  • hostname 显示主机名
  • uname 显示当前操作系统信息
  • firefox & 启动火狐浏览器,并让火狐在后台运行,不影响当前命令行环境。任何命令后跟 & 就表示该命令在后台运行。
  • ctrl + c 会终止当前正在运行的命令。
  • 什么也不输入的情况下连按两个tab键会列出目前系统所有的命令。
  • 历史命令:history 查看执行过的命令; !! 执行前一个命令;!un 执行前面执行过的以un开头的命令; !num 执行history列出的第num个命令;!?ea 执行前面执行过的包含ea的命令;!-n 执行n个命令之前的那个命令。 ctrl + r 可以搜索历史命令,搜索条件为历史命令中包含的任意字符串。 按Esc后按点键,会列出上一个命令的参数。
  • id 显示当前用户信息。
  • passwd 修改当前用户密码。
  • su - 切换到root用户并使用新的shell环境,su 切换到root用户但是不创建新的shell环境。
  • 暂停某个程序:ctrl + z 或者发送信号17
  • 查看后台进程: jobs
  • 暂停进程500秒:sleep 500
  • 继续运行暂停的后台进程: bg 2
  • 继续在前台运行暂停的进程 fg 2

常用命令进阶

  • 日期时间:date 查看设置当前系统时间, date -u 显示 UTC时间,date %Y--%m--%d 格式化显示为:2017--10--05, date -s '20:20:30' 设置时间。
  • 显示硬件时钟时间,就是主板上记录的时间: hwclockclock
  • 查看日历: cal
  • 查看系统运行时间: uptime
  • 显示输入的内容: echo aaa 显示 aaa
  • 查看纯文本文档的内容: cat txt1
  • head -20 txt1 显示 txt1文件的前20行内容
  • tail -20 -f log1 显示log1的最后20行内容,并追踪文件的更新,该命令用来查看日志非常方便。
  • more txt1 翻页显示文件内容,只能向下翻页。空格键翻页。
  • less txt1 翻页显示文件内容,可上下翻页。page down , page up 上下翻页。
  • lspci 查看PCI设备
  • lsusb 查看USB设备
  • lsmod 查看加载的模块,linux中的模块一般指驱动。
  • shutdown , -h 关机, -r 重启。 shutdown -h now 立即关机; shutdown -h +10 10分钟后关机;shutdown -h 23:10 23:10关机;shutdown -r now 立即重启。
  • poweroff 立即关机。
  • reboot 立即重启。
  • 压缩:zip命令 zip zip1.zip file1 ,gzip命令 gzip linuxcast.net
  • 解压缩: unzip zip1.zip
  • 打包归档文件,即把多个文件打包成一个文件:tar -cvf out.tar /dir1 将/dir1文件夹归档成out.tar; tar -xvf out.tar 将out.tar 抽出出来,是归档的反操作;tar -cvzf back.tar.gz /etc 将 /etc 归档并压缩成back.tar.gz
  • 查找文件: locate zy1 快速查找名为zy1的文件或文件夹,locate 是从数据库查找,所以速度快,数据库默认一天一更新,所以新加的文件可能找不到,可通过 updatedb 手工创建或更新数据库。
  • 高级查找文件,文件夹:find 命令,根据指定位置查找,保证实时性,速度较慢,

    find . -name *zy* 在当前位置查找文件名包含zy的文件;find / -perm 777 在根目录下查找所有权限为777的文件; find / -type d 返回所有目录类型的文件;find . -name "zy*" -exec ls -l {} \; 将查找的结果作为参数传给 exec 和 {}; 之间的命令,大括号和反斜线之间有个空格。

Shell编程

示例脚本1 各种变量,输出语句。

执行结果:

说明如下:

  • 用户变量不用声明,随用随写,如上面的userVar1, userVar2 ,用户变量也可用${varName} 来引用

  • 环境变量可以随时用,如上面的 HOME

  • 全局变量用 export 关键字声明,在当前会话结束后失效。

  • 一些特殊符号变量:

    -- $n 外部传入的第n个变量,n为0到9,0代表本脚本的名称。

    -- $* 代表外部传入的所有变量,不包括第0个变量。

    -- $# 外部传入的变量的个数。

    -- $$ 当前执行脚本的PID。

  • 反引号中间的命令会被执行后输出,如上面的 date +%Y%m%d

  • shell的变量只有一种类型:字符串,所以要进行算术计算,需要用到expr命令:

expr 后面的都是参数,所以需要有空格,变量不需要空格。

脚本2 函数和if语句

  • shell 脚本的注释用 #开头,但是如果是 #后紧接着一个感叹号,并且位于文件的第一行,那就不是注释了,是用来说明执行这个脚本需要哪个shell。

  • shell中调用函数不要加括号,直接写名称即可。

  • 左中括号 [ 是一个命令! 位于 /usr/bin 下,用来判断后面表达式的真假。 后面的都是参数,而且最后一个参数必须是右中括号。因为后面的都是参数,所以参数之间要有空格。

  • if 后面也可以跟命令,比如 if ls -l /home; then

  • 文件判断参数

    -- -d $path 判断目录是否存在。

    -- -f $file 判断文件是否存在

    -- -e $pathname 判断文件或目录是否存在。

  • 算术比较运算,比较的是数值。

    -- $num1 -eq $num2 判断连个数是否相等。

    -- -ne 判断不等。

    -- -lt 判断小于。

    -- -le 判断小于等于。

    -- -gt 判断大于。

    -- -ge 判断大于等于。

  • 字符串比较

    -- $str1 = $str2 两个字符串是否相等。

    -- $str1 != $str2 两个字符串是否不等。

    -- -z str1 字符串长度是否为0

    -- -n str1 字符串长度是否不为0.

示例脚本3 case 语句

  • 语法: case .. in 1) .. ;; 2) .. ;; *) ...;; esac.
  • 每个case 的最后一行代码且只有最后一行代码要加两个分号表示结束。

  • for 语句有两种写法,见上图。
  • in 后面是一个列表
  • 如果是第二中写法,要用两个小括号。
  • break , continue 和普通编程语言的一样。

while 语句

while 循环调节
do
code ....
done

Linux命令行和shell编程的更多相关文章

  1. Linux命令行和Shell高效率使用方法

    Ctrl+R快速搜索history Ctrl+P显示上一条命令 快速执行一条history命令:!!/!-number ======================================== ...

  2. Linux下的Shell编程

    从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...

  3. Linux 与 unix shell编程指南——学习笔记

    第一章    文件安全与权限 文件访问方式:读,写,执行.     针对用户:文件属主,同组用户,其它用户.     文件权限位最前面的字符代表文件类型,常用的如         d 目录:l 符号链 ...

  4. Linux学习之Shell编程基础

    转自:http://my.oschina.net/itblog/blog/204410 1 语法基本介绍1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来 ...

  5. linux下的Shell编程(3)shell里的流程控制

    if 语句 if 表达式如果条件命令组为真,则执行 then 后的部分.标准形式: if 判断命令,可以有很多个,真假取最后的返回值 then 如果前述为真做什么 [ # 方括号代表可选,别真打进去了 ...

  6. [No000014A]Linux简介与shell编程

    Linux 介绍 内核 库: .so 共享对象,windows:dll 动态链接库 应用程序 Linux的基本原则: 1.由目的单一的小程序组成:组合小程序完成复杂任务: 2.一切皆文件: 3.尽量避 ...

  7. linux操作系统5 shell编程

    知识内容: 1.shell编程预备知识 2.shell变量 3.表达式与运算符 4.分支循环语句 5.函数 一.shell编程预备知识 1.什么是shell编程 shell是与linux交互的基本工具 ...

  8. Linux下的shell编程入门

    通常情况下,我们从命令行输入命令每输入一次就能够得到系统的一次响应.一旦需要我们一个接着一个的输入命令而最后才得到结果的时候,这样的做法显然就没有效率.要达到这样的目的,通常我们利用shell程序或者 ...

  9. linux学习总结----shell编程

    ## 环境变量 ## 全局变量 ``` 常见的全局环境变量 PATH 指令的搜索路径 HOME 用户的家目录 LOGNAME 登录名 SHELL 脚本的类型 使用全局环境变量 echo $PATH 自 ...

随机推荐

  1. Android分享介绍

    一.使用系统分享 public void execShare(Activity context,String title,String text){ Intent intent = new Inten ...

  2. linux系统下信号具体解释2

    信号是UNIX 系统所使用的进程通信方法中,最古老的一种.信号不但能从内核发往一个进程,也能从一个进程发往还有一个进程.比如,用户在后台启动了一个要运行较长时间的程序,假设想中断其运行,能够用kill ...

  3. 强大的 pdf 编辑器 —— Acrobat

    菜单栏中的 [编辑](Edit)⇒ [编辑文本和图像](Edit Text & Images) 可以随意地编辑当前 pdf 中的文本信息,和图像信息: pdf 格式的转换,更是不在话下. 转 ...

  4. 零元学Expression Design 4 - Chapter 5 教你如何用自制笔刷在5分钟内做出设计感效果

    原文:零元学Expression Design 4 - Chapter 5 教你如何用自制笔刷在5分钟内做出设计感效果 本章将教你如何运用笔刷与简单线条,只要5分钟,就能做出设计感效果 ? 本章将教你 ...

  5. Java高级应用(一个)-文件夹监控服务

    最近.在研究一些比较成熟的框架.他们还发现,他们中的一些相当不错的文章.现在,对于一些在你们中间一个简单的翻译(版的英文文章,非常有帮助). 译:原文链接 你有没有发现,当你编辑一个文件.同一时候使用 ...

  6. python 教程 第一章、 简介

    第一章. 简介 官方介绍: Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程.Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使 ...

  7. C++ 异常机制分析(C++标准库定义了12种异常,很多大公司的C++编码规范也是明确禁止使用异常的,如google、Qt)

    阅读目录 C++异常机制概述 throw 关键字 异常对象 catch 关键字 栈展开.RAII 异常机制与构造函数 异常机制与析构函数 noexcept修饰符与noexcept操作符 异常处理的性能 ...

  8. SICP 关于递归迭代的重新理解以及尾递归的引入...

    看了线性的递归和迭代以及树形递归迭代这部分的内容,感觉对递归和迭代又有了新的理解...所以记录一下,也算对这部分内容的总结吧. 首先书中提到的递归与迭代和我以前想的有点不一样,我感觉书中提到的递归和迭 ...

  9. WPF MVVM+EF增删改查 简单示例(二) 1对1 映射

    WPF MVVM+EF增删改查 简单示例(一)实现了对学生信息的管理. 现在需求发生变更,在录入学生资料的时候同时需要录入学生的图片信息,并且一名学生只能有一张图片资料.并可对学生的图片资料进行更新. ...

  10. QDialog在hide()之后,就被销毁的原因

    一路跟踪源码,关键就是这两句: int QDialog::exec() { Q_D(QDialog); if (d->eventLoop) { qWarning("QDialog::e ...