zoukankan      html  css  js  c++  java
  • Linux命令行和shell编程

    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
    
  • 相关阅读:
    long和Long的区别
    C语言的变量的内存分配
    Java蓝桥杯 算法提高 九宫格
    Java实现 蓝桥杯算法提高金明的预算方案
    Java实现 蓝桥杯 算法提高 新建Microsoft world文档
    Java实现 蓝桥杯 算法提高 快乐司机
    Java实现 蓝桥杯 算法提高 三角形
    Java实现 蓝桥杯 算法提高 三角形
    Java实现 蓝桥杯 算法提高 三角形
    Java实现 蓝桥杯 算法提高 三角形
  • 原文地址:https://www.cnblogs.com/imap/p/7554456.html
Copyright © 2011-2022 走看看