当前位置 博文首页 > DevínKelly的博客:关于Linux指令操作大全(整理一)

    DevínKelly的博客:关于Linux指令操作大全(整理一)

    作者:[db:作者] 时间:2021-08-15 10:15

    Linux目录结构:

    bin (binaries)----------------> 存放二进制可执行文件

    sbin (super user binaries)----> 存放二进制可执行文件,只有root才能访问

    etc (etcetera)-----------------> 存放系统配置文件

    usr (unix shared resources)—> 用于存放共享的系统资源

    home --------------------------> 存放用户文件的根目录

    root -------------------------> 超级用户目录

    dev (devices)------------------> 用于存放设备文件

    lib (library)-----------------> 存放跟文件系统中的程序运行所需要的共享库及内核模块

    mnt (mount)-------------------> 系统管理员安装临时文件系统的安装点

    boot --------------------------> 存放用于系统引导时使用的各种文件

    tmp (temporary)---------------> 用于存放各种临时文件

    var (variable)----------------> 用于存放运行时需要改变数据的文件

    Linux常用命令:

    hostname ---------------> 查看主机.

    ifconfig ----------------> 查看ip地址.

    ping ip地址 -------------> 测试网络的连通性 ip 192.168.3.4

    shutdown ---------------> 系统关机.

    -r  关机后, 立即重启.
    -h  关机后, 不重新启动.
    

    halt --------------------> 关机后,关闭电源.

    reboot ------------------> 重新启动.

    crtl c ---------------> 停止当前进程.

    history-----------------> 查看命令历史.

    crtl l ----------------> 清屏.

    clear-------------------> 清屏.

    su ---------------------> 切换用户,低权限用户切换时,默认切换为root, 需要输入密码. 高权限切为低权限需要指定用户名.

    top --------------------> 显示当前系统中耗费资源最多的进程

    ps ---------------------> 显示瞬间的进程状态

    -e /-A 显示所有进程,环境变量
    -f 全格式
    -a 显示所有用户的所有进程(包括其它用户)
    -u 按用户名和启动时间的顺序来显示进程
    -x 显示无控制终端的进程
    

    ps -ef | more ---------> 查看进程

    kill -9 pid值 ----------> 杀死一个进程 , kill -9 3727

    df ---------------------> 显示文件系统磁盘空间的使用情况.

    free--------------------> 显示当前内存和交换空间的使用情况

    netstat ----------------> 显示网络状态信息

    -a 显示所有连接和监听端口
    -t (tcp)仅显示tcp相关选项
    -u (udp)仅显示udp相关选项
    -n 拒绝显示别名,能显示数字的全部转化成数字。
    -p 显示建立相关链接的程序名
    

    netstat -an | grep 8080 -----> 查找8080端口的程序.

    ls -la /usr ------------> 查看文件和目录列表. ls -lt /usr , ls -l /usr , ls -a /usr , ll(查看默认目录内容)

    -a 显示所有,包括隐藏文件.
    -l 以长列表形式显示long.
    

    ls -lhR mnt/ ----> 表示查看大小, R表示递归查看, 可以查看mnt下的所有的文件夹及文件.

    cd /usr --------------> 切换目录 , cd . , cd … , cd /usr/local/java , cd 跳出当前环境.

    cd - -----------------> 返回进入此目录之前所在的目录

    cd !$ ----------------> 把上个命令的参数作为cd参数使用。

    pwd --------------------> 查看当前工作目录.

    help + 命令 ------------> 内部命令, 查看帮助文档. eg: help cd

    man + 命令 ------------> 外部命令, 查看文档帮助. eg: man ls

    mkdir 文件目录 --------> 创建文件目录 mkdir /usr/local/jdk , mkdir /hello ,

    创建项目的目录结构:
    mkdir -vp scf/{lib/,bin/,doc/{info,product},logs/{info,product},service/deploy/{info,product}}

    创建的目录结构如下:
    scf/
    |-- bin
    |-- doc
    | |-- info
    | -- product |-- lib |-- logs | |-- info |– product
    -- service– deploy
    |-- info
    `-- product

    mkdir room-1,room-2,room-3 , 可以一次性创建多个目录.

    mkdir -p 文件目录 -----> 创建文件目录, 父目录不存在, 先创建父目录. mkdir -p /java/jdk7

    mkdir -m 777 dirname ----> 创建权限为777的文件目录.

    cp 文件 目录 ---------> 复制文件到目录下. cp book room-a, 复制book文件, 并放在room-a目录下.

    cp -r 目录/文件 目录--------> 递归处理,将指定目录下的文件与子目录一并拷贝 . cp -r /usr/java /family/room , 将java下的左右内容复制到room下.

    touch:
    1). touch 文件 ------------> 创建一个空文件. touch book , 创建一个文件book.

    2). touch -r  file1.log  file2.log -----> 更新file2.log的时间戳与file1.log的时间相同.(file1.log的时间戳不变)
    	
    	-r  把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。
    
    3). touch -t 201502072137.50 file3.log ----> 手动设定文件的时间戳.
    
    	-t time : 使用指定的时间值 time 作为指定文件相应时间戳记的新值.此处的 time规定为如下形式的十进制数: [[CC]YY]MMDDhhmm[.SS] 
    

    echo ‘内容’ > 文件名----> 在创建文件时, 添加文件内容. echo ‘think in java’ > book, 创建book文件时, 添加内容"think in java".

    echo ‘content’ > filename -----> 往文件中追加信息.

    文件 -----------------> 创建一个空文件, 与touch 效果相同.

    mv :
    1). 文件改名 : mv test1.log test2.txt ----> 将test1.log 名字改为 test2.txt

    2). mv dir1 dir2  ---------> 如果目录dir2不存在,将目录dir1改名为dir2;否则,将dir1移动到dir2中。
    
    3). mv  目录/文件(*)  目录 --> 将目录或文件,移动到另一个目录中.
    
    4). mv  book  room-a  room-c/ , 将文件book及目录room-a移动到room-c目录中. 
    
    	eg: mv * ../  -----> 将本目录下的内容全部移动到上一级目录.
    
    5). mv -t /opt/soft/test/test4/ log1.txt log2.txt log3.txt 命令将三个文件移动到test4目录中去
    
    	-t: 加上这个, 就可以将目录放在前面, 文件放在后面.
    

    rm 目录 ---------------> 移除文件. rm room , 删除文件, 会有确认, 移除目录, 只能移除空目录.

    -r 同时删除该目录下的所有文件(recursive),递归删除
    -f 强制删除文件或目录(force)
    
    rm  -rf  room , 移除room目录及其中的所有内容.
    

    rmdir 空目录------------> 删除空目录.

    cat :
    1). cat 文件 ---------------> 查看文件中的信息, 全部显示. cat install.log , 查看其全部信息, 全部显示.

    	参数: 
    	-A, --show-all           等价于 -vET
    	-b, --number-nonblank    对非空输出行编号
    	-e                       等价于 -vE
    	-E, --show-ends          在每行结束处显示 $
    	-n, --number     对输出的所有行编号,由1开始对所有输出的行数编号
    	-s, --squeeze-blank  有连续两行以上的空白行,就代换为一行的空白行 
    	-t                       与 -vT 等价
    	-T, --show-tabs          将跳格字符显示为 ^I
    	-u                       (被忽略)
    	-v, --show-nonprinting   使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外
    
    2). cat > filename ----------> 从键盘创建一个文件,只能创建新文件,不能编辑已有文件.
    
    3). 将几个文件合并为一个文件: cat file1 file2 > file .
    
    	cat 1.txt 2.txt > new.txt -------> 将1.txt和2.txt文件的内容合并到new.txt文件中, 前提是new.txt文件是存在的.
    
    4). tac file1.log ------> 反向列示, 就是讲文件的内容从后向前, 倒过来显示.
    
    5). here doc 来生成文件.
    
    	cat > 1.log << eof
    	> ...
    	> ...
    	>eof
    	--------> 系统会将...键盘接受的输入的内容输出到文件1.log中, eof为开始和结束标志, 注意语法.
    

    nl 命令:

    1). nl file.log --------------> 带行号查看文件, 如果为空行, 则不计算该行的行号
    
    2). nl -b a file.log ---------> 带行号查看文件, 如果该行为空行, 也计算该行的行号.
    
    3). nl -n ln file.log --------> 在屏幕的最左方显示行号.
    
    4). nl -n rn file.log --------> 在屏幕的最右方显示行号.
    
    5). nl -n rz file.log --------> 行号在自己栏位的最右方显示,且加 0 ;
    

    more/less 文件 ---------> 分页显示文件内容. more install.log

    1). more +5 file.log ------------> 查看文件file.log自第五行之后的文件内容.
    
    2). more +/day3 log2012.log -----> 从文件中查找第一个出现"day3"字符串的行,并从该处前两行开始显示输出 
    
    3). more -10 menu.sh ------------> 设定每屏显示行数 
    
    4). ls -l  | more -5 ------------> 列一个目录下的文件,由于内容太多,我们应该学会用more来分页显示。这得和管道 | 结合起来
    
    -------> 每页显示5个文件信息,按 Ctrl+F 或者 空格键 将会显示下5条文件信息。
    

    head/ tail --------------> 查看文本中开头或结尾部分的内容,默认显示十行. head install.log, tail install.log.

    tail -n 5 install.log----> 查看文本的末尾的5条数据.

    tail -f install.log----> 循环读取文本中的数据.

    wc install.log-----------> 统计文本的行数、字数、字符数. // 920 1853 39317 install.log

    -m 统计文本字符数	-w 统计文本字数(word)   -l 统计文本行数(line)
    
    wc -m install.log	wc -w install.log	wc -l install.log
    

    find 指定目录(选) -name 文件/目录名—> 在文件系统中查找指定的文件 , 指定目录可以不填.
    find -name book , 将从文件系统中查找所有的book的路径

    grep ‘内容’ 文件 ---------------> 在指定的文本文件中查找指定的字符串 . grep ‘java’ book.

    ln -s family/room-c/ link -------> 建立链接文件

    -s 对源文件建立符号连接,而非硬连接
    

    time [command] ----> 查看指定命令的执行时间.

    which 命令:

    1). which  查看可执行文件的位置。
    
    	which pwd ----------> /bin/pwd
    
    	which useradd ------> /usr/sbin/useradd
    
    2). whereis 查看文件的位置。
    
        3). locate   配合数据库查看文件位置。
    
        4). find   实际搜寻硬盘查询文件名称。
    
    5). which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。
    

    gzip 文件 ------------------------> 压缩(解压)文件或目录,压缩文件后缀为gz

    -d将压缩文件解压(decompress)
    -l显示压缩文件的大小,未压缩文件的大小,压缩比(list)
    -v显示文件名和压缩比(verbose)
    -num用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),
    	-9或--best表示最慢压缩方法(高压缩比)。系统缺省值为6
    
    eg: gzip  install.log , 压缩.  gzip -d install.log.gz, 解压.  
        gzip  -9  install.log , 高压缩比压缩.
    

    bzip2 文件 -----------------------> 压缩(解压)文件或目录,压缩文件后缀为bz2

    -c将压缩的过程产生的数据输出到屏幕上
    -d解压缩的参数(decompress)
    -z压缩的参数(compress)
    -num 用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),
    	-9或--best表示最慢压缩方法(高压缩比)。系统缺省值为6
    
    bzip2  install.log, 压缩. bzip2  -d  install.log.bz2, 解压.
    

    tar 文件-------------------------> 文件、目录打(解)包

    -c 建立一个压缩文件的参数指令(create)
    -x 解开一个压缩文件的参数指令(extract)
    -z 是否需要用 gzip 压缩
    -j 是否需要用 bzip2 压缩
    -v 压缩的过程中显示文件(verbose)
    -f 使用档名,在 f 之后要立即接档名(file)
    
    tar  -czvf  ff.tar.gz  family/, 将文件解压到family目录下.
    

    nohup -----> 不挂断的运行命令. 如: nohup java -jar sendMessage.jar & —> & 表示后台运行,需要加上

    			----> 后台运行, 原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用。
    

    nohup command > myout.log 2>&1 & ----> 也可以指定输出日志的文件 , 2>&1 表示错误输出也指向正常日志, 也就是, 错误正确都指向这个日志文件.

    VIM/VI 文本编辑器:

    vim install.log ----> 进入文本详情:
    
    i ----------> 在光标前插入.
    I ----------> 在光标当前行开始插入.
    a ----------> 在光标后插入.
    A ----------> 在光标当前行末尾插入.
    o ----------> 在当前行的下一行插入新的空行.
    O ----------> 在当前行的上一行插入新的空行.
    
    :set nu-----> 显示行号.
    :set nonu---> 取消行号.
    gg----------> 到文本的第一行.
    G-----------> 到文本的最后一行.
    :n----------> 到文本的第n行.
    
    x-----------> 删除光标所在处的字符.
    nx----------> 删除光标所在处后的n个字符.
    dd----------> 删除光标所在行 
    ndd---------> 删除n行.
    dG----------> 删除光标所在行到末尾行的所有行.
    D-----------> 删除光标所在处到行尾的内容.
    :n1,n2d ----> 删除指定范围的行.
    
    u-----------> 取消上一步操作.
    crtl+r------> 返回到undo之前.
    r-----------> 替换光标坐在处的字符.
    R-----------> 从光标所在处开始替换,按esc键结束.
    
    shift+zz ---> 保存退出
    :wq --------> 保存并退出,与上述作用相同.
    :x ---------> 保存并退出
    :q! --------> 不保存退出
    v 或 shift+v----> 进入行可视模式.
    crtl+v -----> 进入块可视模块.
    

    用户与账户管理:

    /etc/passwd ----------------> 保存用户信息的文件:
    /etc/shadow ----------------> 保存密码的文件
    /etc/group -----------------> 保存用户组的文件
    /etc/gshadow ---------------> 保存用户组密码的文件
    /etc/default/useradd -------> 用户配置文件

    查看其中的内容就可以使用: cat , more, less, tail, head.

    操作用户命令:

    --------------------------------> account:password:UID:GID:GECOS:directory:shell <-----------------------

    添加用户命令:useradd username-----> 添加用户. useradd lisi

    -u 指定组ID(uid)
    -g 指定所属的组名(gid)
    -G 指定多个组,用逗号“,”分开(Groups)
    -c 用户描述(comment)
    -e 失效时间(expire date)
    

    查看用户的命令: id username --> id root ===> uid=0(root) gid=0(root) groups=0(root) ;

    查看系统的所有的用户信息: cat /etc/passwd --> 对于普通用户, uid都是从500开始排的.

    设置密码命令: passwd username---------> 为哪个用户设置密码, eg: passwd lisi—> 为lisi用户设置密码.

    ll /home/ ----------> 查看用户及组.
    cat /etc/passwd-----> 查看用户信息.

    cat /etc/shadow ----> 查看当前系统中的账户的密码信息.

    cat /etc/group ----> 查看当前用户的组信息.

    修改用户命令:usermod(user modify)

    -l 修改用户名 (login)usermod -l a b(b改为a) -----------  eg : usermod  -l  LiSi  zhangsan  将用户名张三修改为LiSi.
    -g 添加组 usermod -g sys tom
    -G添加多个组 usermod -G sys,root tom
    –L 锁定用户账号密码(Lock)
    –U 解锁用户账号(Unlock)
    

    删除用户命令:userdel(user delete) —> 删除用户的同时,会删除该用户的组,密码, home下的所有信息.
    -r 删除账号时同时删除目录(remove)

    查看系统中组的信息: cat /etc/group

    添加组:groupadd
    -g 指定gid

    修改组:groupmod
    -n 更改组名(new group)

    删除组:groupdel
    groups 显示用户所属组

    将用户添加到组中:

    gpasswd -a user1 root -----> 将用户user1 添加到root组中.  一个用户可以同时属于多个组.  该用户的权限, 是两个组的权限之和.
    

    把组中的用户删除:

    gpasswd -d user1 root  -----> 将root组中的user1用户删除. 
    

    权限管理:

    三种基本权限
    r 读权限(read)
    w 写权限(write)
    x 执行权限 (execute)

    d r w x r - x r - x - r w - r - - r - - l r w x r w x r w x

    第1位:文件类型(d 目录,- 普通文件,l 链接文件)
    第2-4位:所属用户权限,用u(user)表示
    第5-7位:所属组权限,用g(group)表示
    第8-10位:其他用户权限,用o(other)表示
    第2-10位:表示所有的权限,用a(all)表示
    
    完整信息:一个文件,所属用户具有读写执行权限;所属组的用户
    有读写权限,没有执行权限;其他用户只有读权限
    

    //------- chmod 权限分配

    chmod修改文件权限命令(change mode)
    参数:-R 下面的文件和子目录做相同权限操作(Recursive递归的)

    -----> chmod  u+x  a.txt  --- 增加权限 |  chmod  u-x  a.txt	  ---- 减少权限
    -----> chmod  g+x  a.txt  --- 增加权限 |  chmod  g-x,g-w  a.txt   ---- 减少权限
    -----> chmod  a+x  a.txt
    

    用数字来表示权限(r=4,w=2,x=1,-=0)

    -----> chmod  750  b.txt
    
    rwx用二进制表示是111,十进制4+2+1=7
    r-x用二进制表示是101,十进制4+0+1=5
    
          7                 5                 0
    1  1  1       1    0    1       0    0   0
    r  w  x	      r    _    x	-    -   -
    

    // ----------- acl 权限 ------

    1). getfacl root.txt ----> 获取文件的权限信息. 返回文件名,文件拥有者, 所属组, 用户权限,组权限,其他权限.

    2). setfacl -m u:deng:rw root.txt ----> 为用户deng分配root.txt文件的权限. -m表示更改modify

    3). setfacl -x u:deng root.txt -----> 删除给deng这个用户层设置的所有权限. 通过acl设置的权限.

    4). setfacl -b root.txt --------------> 擦除给文件root.txt上的所有的acl权限.

    setfacl -bR deng ------> 遍历擦除deng文件夹下的所有的acl权限.
    

    5). linux中的文件如果没有执行(x)的权限, 是不能切换到该目录下的. 切换的瞬间是执行该文件夹.

    6). 如果要在目录下 删除/创建 一个文件, 需要对该目录设置权限.

    setfacl  -m  u:deng:rwx /mnt
    

    7). 如何对一个目录及子目录和文件设置权限:

    setfacl -m u:deng:rwx -R /mnt  -----> -R 表示, 递归设置权限.
    ---> 这样设置是可以解决当前目录下当前所有文件的acl权限, 但是后期新加的子目录和文件, 无法继承父目录的权限.
    
    解决方法: 
    ①. setfacl -m u:deng:rwx -R /mnt ----> 给现有是目录文件递归添加权限.
    ②. setfacl -m d:u:deng:rwx -R /mnt  ----> 给目录做默认权限操作.
    

    //----------- visudo 权限 --------------

    设置用户对命令的执行权限-visudo ----> sudo授权.配置中配置.

    1. 设置

    visudo ----> 进入权限设置文件配置.

    下列这种方式需要密码:

    ①. user1 locahost=/usr/sbin/useradd —> 给user1分配useradd命令的执行权限.
    ②. user1 localhost=/usr/sbin/userdel —> 给user1分配userdel命令的执行权限.

    下列的这种方式不需要使用密码:

    user1 ALL = NOPASSWD:/usr/sbin/useradd —> 不需要当前用户输入密码.
    user1 localhost = NOPASSWD:/usr/sbin/useradd —> 不需要当前用户输入密码.

    2.使用sudo授权的命令, 需要在命令前加上sudo

    sudo /usr/sbin/useradd user2
    sudo /usr/sbin/userdel -r user2

    1. 使用无密码的sudo授权命令

    rpm命令使用:

    rpm的常用参数:
    	i:安装应用程序(install)
    	e:卸载应用程序(erase)
    	vh:显示安装进度;(verbose   hash) 
    	U:升级软件包;(update) 
    	qa: 显示所有已安装软件包(query all)
    	结合grep命令使用
    
    	ex:rpm  -ivh  3.el6.x86_64.rpm -C  /usr/java-------> 直接安装. 
    	    rpm  -Uvh  xxxxxxxxxxx.rpm  -C  /usr/java  -------> 更新升级安装包.
    

    tomcat的安装:

    解压: tar -zxvf apache-tomcat-7.0.47.tar.gz -C /usr/local/src/
    

    启动tomcat:

    1). cd /usr/local/src ----> [root@itcast01 src]#  ./ 
    
    2). cd /usr/local/src ----> [root@itcast01 src]# sh  apache-tomcat-7.0.47/bin/startup.sh  --- > 推荐.
    
    3). [root@itcast01 bin]# sh  startup.sh   ---> 这种可以推荐使用.
    

    防火墙:
    service iptables status; --------> 查看防火墙.
    service iptables stop; ----------> 关闭防火墙.

    source /etc/profile----------------------> 刷新文件. 当配置文件修改时, 需要刷新文件.

    IP地址的配置:

    1). 直接通过图形化界面, 来配置ip地址.
    2). 通过setup指令, 进入网络设置.
    3). vim /etc/sysconfig/network-scripts/ifcfg-eth0
    

    vim /etc/sysconfig/network ----------> 修改hostname.

    vim /etc/hosts-----------------------> 配置hosts.系统内部的DNS

    yum -y install mysql-server ----------> 联网自动下载需要安装的软件. -y 表示提示安装过程.

    yum update ----> 全部更新

    yum check-update -----> 检查可更新的程序.

    //--------------------------------- Shell 脚本编程 ------------------------------

    1. 历史命令

      history 查看历史命令;

       ! 指定的命令索引, 可以调用该命令   !5 --> 执行第五条命令
       
       !vi --> 调用历史中最后一次使用vi开头的命令.  !ser --> 执行历史中最后一次执行的ser*开头的命令
      

      history -c 清除历史命令

      init 0 关闭系统

      tr —> 转换字符, 如: 将大写转为小写,选项可以让你指定所要删除的字符,以及将一串重复出现的字符浓缩成一个.

    2. 命令别名

      alias x=‘ll’ —> 给命令起别名, 然后可以使用简短的别名操作

       ---> 这样的别名, 服务器重新启动后就会失效 ; 持久化, 可以将其存储在 .bashrc文件中
      

      alias —> 查看系统中的所有的命令的别名.

      unalias x —> 清除指定的别名.

    3. 输出重定向

      ll >> root.txt -----> bash输出重定向. 将查找到的数据放在root.txt文件中.

      和 >> 的区别:

       1).都是重定向,  > 是覆盖式重定向, >> 是追加式重定向.
      

      1> 和 2> 的区别:(覆盖式) 1>> 2>> (追加式)

       1). 1> 是正确重定向, 如果前面的命令是正确的, 将该命令的返回结果存储在指定的文件中.
       2). 2> 是错误重定向, 如果前面的命令是错误的, 将该命令的返回结果存储在指定的文件中.
      

      &> 把正确的或者错误的输出结果存储在文件中. (是覆盖式的输出, 并非追加式输出)

      bash red.sh 1>>note.txt 2>&1 —> 将正确的输出结果存在note.txt中,将错误的结果也通过1的通道存储在note.txt中, 而且还是追加.

      < 输入数据.

    4. shell的管道操作.

      free -m | grep -i mem ----> 通过管道|, 将前面的查询结果, 交给后面, 由后面的grep来过滤.

       --> 1). free 查看内存信息, -i 表示忽略大小写匹配, grep 表示查找.
      

      free -m | grep -i mem | awk ‘{print $1"\n",$2"\n",$3"\n",$4"\n"}’; ----> 此处使用了awk编程. "\n"表示换行 , 查找指定的列.

    5. 执行shell脚本的方式:

      1). bash test.sh -----> 不需要再文件中写解析器
      -----> 不需要给脚本设置执行权限

      2). ./test.sh -----> 需要些解析器
      -----> 需要给脚本设置执行权限.

    6. crontab LINUX下的任务调度:

      格式: * * * * * *
      分 时 日 月 周 命令

      30 21 * * * /usr/local/etc/rc.d/lighttpd restart
      ----> 上面的例子表示每晚的21:30重启apache

      30 17 * * 5 /opt/deng/test.sh
      ----> 表示每周五17:30执行test.sh脚本;

    vi crontab ----> 可以将定时任务放在crontab中,linux会定时执行这里的任务.

    printf 与 echo的功能基本相同, 只是printf不会自动换行,需要"\n"来操作换行 , 这两个命令的标准不同.

    printf “this is a test program , %s , %s \n” Hello world --------> this is a test program , Hello , world

    与C语言中的printf用法很相似.

    1. 变量的定义: 变量的引用 $

      1). shell 中的变量只能以 字母 或者 下划线_ 开头, 并且字母区分大小写.

      2). 在LINUX下的, 所有的文件名, 路径都是区分大小写的.

      3). 变量可以使用双引号"", 也可以使用单引号’’, 都可以使用

      name=“dengchangtao” —> 注意,这里的空格都会影响执行的结果.

      echo $name ----> 变量可以直接引用输出.

      echo “my name is $name” ----> “my name is dengchangtao” 变量也可以在一段话中输出.

      echo “my name is $nameDeng” ----> "my name is " 这种方式不能正常输出, 会寻找变量nameDeng, 不能自动识别.

      echo "my name is n a m e D e n g &quot; ? ? ? ? &gt; &quot; m y n a m e i s d e n g c h a n g t a o D e n g &quot; ? ? ? &gt; 可 以 通 过 {name}Deng&quot; ----&gt; &quot;my name is dengchangtaoDeng&quot; ---&gt; 可以通过 nameDeng"????>"mynameisdengchangtaoDeng"???>{}将变量封装在{}中引用输出.

    2. read -p ---------> 接受键盘输入事件 : /*** read [-p “信息”] 变量名

      $name ----> 表示变量name, $ 引用变量.

      read -p “please input your name :” name -----> 读取键盘事件接受到的内容, 将其赋值给变量name

      echo “my name is $name”

    3. name=“dengchangtao”

      echo $name

      echo ‘my name is $name’ —> my name is $name —>

    4. 1). 单引号 ‘’ 是不能解析变量的. ‘my name is $name’ —> 其中的name变量是不能被解析的.

      2). 双引号 “” 可以解析变量. “my name is $name” —> 其中的name变量是可以解析的.

      3). 反引号 `` 可以将其中的命令,输出的结果,返回给前面的变量. —> str = echo dengchangtao echo “$str” ----> “dengchangtao”

      -----> num=expr 1 + 2 + 3 —> 将表达式的执行结果, 赋值给变量num.

    5. date ----> linux 命令可以直接输出当前的日期时间.

      set -x -----> 打开shell脚本的执行跟踪功能;

      set +x -----> 关闭shell脚本的执行跟踪功能.

    6. unset 变量名 —> 清除变量.

      name=“dengchangtao”
      echo $name —> dengchangtao
      unset name
      echo $name —> 没有输出内容

    7. 位置变量:

      $n n<9 —> $1 $2 $3 $4 $5 $6 $7 $8 9 ? ? &gt; 位 置 变 量 就 只 要 这 9 个 . 可 以 超 过 10 , 十 个 以 上 , 引 用 变 量 就 需 要 使 用 9 --&gt; 位置变量就只要这9个. 可以超过10,十个以上,引用变量就需要使用