zoukankan      html  css  js  c++  java
  • Linux基础学习整理

    linux学习记录

    下载地址

    centos 下载地址:

    网易镜像:http://mirrors.163.com/centos/6/isos/
    搜狐镜像:http://mirrors.sohu.com/centos/6/isos/

    Linux目录结构

    文件目录结构图

    /bin:是Binary的缩写,这个目录存放着系统必备执行命令
    /boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件,自己的安装别放这里
    /dev:Device(设备)的缩写,该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
    /etc:所有的系统管理所需要的配置文件和子目录。
    /home:存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
    /lib:系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
    /lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
    /media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
    /misc: 该目录可以用来存放杂项文件或目录,即那些用途或含义不明确的文件或目录可以存放在该目录下。
    /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
    /net 存放着和网络相关的一些文件.
    /opt:这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
    /proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
    /root:该目录为系统管理员,也称作超级权限者的用户主目录。
    /sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
    /selinux:这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙
    /srv:service缩写,该目录存放一些服务启动之后需要提取的数据。
    /sys: 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。
    /tmp:这个目录是用来存放一些临时文件的。
    /usr: 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录。
    /var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

    常用:/home /etc /mnt /root /opt /tmp /usr /var

    系统管理

    查看当前服务器IP地址
    [root@hostname/]# ifconfig
    eth0      Link encap:Ethernet  HWaddr 00:0C:29:84:6C:C1  
              inet addr:192.168.1.131  Bcast:192.168.1.255  Mask:255.255.255.0
              inet6 addr: fe80::20c:29ff:fe84:6cc1/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:28537 errors:0 dropped:0 overruns:0 frame:0
              TX packets:12206 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:2370715 (2.2 MiB)  TX bytes:4462450 (4.2 MiB)
    
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:41376 errors:0 dropped:0 overruns:0 frame:0
              TX packets:41376 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:14479865 (13.8 MiB)  TX bytes:14479865 (13.8 MiB)
    
    
    修改IP地址
    
    [root@hostname/]# vim /etc/udev/rules.d/70-persistent-net.rules 
    
    # This file was automatically generated by the /lib/udev/write_net_rules
    # program, run by the persistent-net-generator.rules rules file.
    #
    # You can modify it, as long as you keep each rule on a single
    # line, and change only the value of the NAME= key.
    
    # PCI device 0x8086:0x100f (e1000)
    
    # PCI device 0x8086:0x100f (e1000)
    SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:84:6c:c1", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
    ~                                                                                                                                                           
    ~     
    

    如果是克隆机器,需要将eth0网卡进行删除,并将eth1改为eth0,并复制新的eth0的物理地址

    [root@hostname /]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 
    
    DEVICE=eth0
    TYPE=Ethernet
    UUID=be00cae8-1162-4642-8530-6ad09fd674fc
    ONBOOT=yes
    NM_CONTROLLED=yes
    BOOTPROTO=static
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=yes
    IPV6INIT=no
    NAME="System eth0"
    HWADDR=00:0c:29:84:6c:c1
    IPADDR=192.168.1.131
    GATEWAY=192.168.1.1
    DNS1=192.168.1.1
    PREFIX=24
    LAST_CONNECT=1543763603
    ~                                                                                                                                                           
    ~                                                                                                                                                           
    ~      
    

    需要修改的地方如下:
    IPADDR=192.168.1.131
    GATEWAY=192.168.1.1
    ONBOOT=yes
    BOOTPROTO=static 设置为静态ip
    DNS1=192.168.1.1
    HWADDR=00:0c:29:84:6c:c1 设置为刚才复制的物理地址

    设置完成,重启机器即可

    配置主机名称

    1.查看主机名称

    [root@hostname /]# hostname
    hostname
    
    

    2.修改network文件

    [root@hostname /]# vi /etc/sysconfig/network
    
    NETWORKING=yes
    HOSTNAME=hostname
    
    

    3.修改hosts文件

    [root@hostname /]# vim /etc/hosts
    添加如下内容
    192.168.1.131 hostname
    
    
    防火墙

    1.查看防火墙的状态

    service iptables status
    

    2.临时关闭防火墙

    service iptables stop
    

    3.查看防火墙开机启动状态

    chkconfig iptables --list
    

    4.关闭防火墙开机启动

    	chkconfig iptables off
    

    5.开启防火墙开机启动

    	chkconfig iptables on
    
    关机重启机器
    1.sync  (功能描述:将数据由内存同步到硬盘中)
    2.shutdown [选项] 时间	
    	选项:
    		-h:关机
    		-r:重启
    3.halt 	(功能描述:关闭系统,等同于shutdown -h now 和 poweroff)
    4.reboot 	(功能描述:重启系统,等同于 shutdown -r now)
    

    远程登录

    windows 远程登录linux系统软件
    xshell,SecureCRT,winscp

    用户和用户组

    用户
    添加用户
    useradd 用户名
    
    设置密码
    passwd 用户名
    
    判断用户是否存在
    id 用户名
    
    切换用户
    su 用户名称 
    

    root用户切换普通用户无需输入密码,普通用户切换root用户需要输入密码

    删除用户
    1.删除用户但保存用户主目录
    			userdel  用户名		
    2.删除用户不保存用户主目录
    			userdel -r  用户名		
    
    查看登录用户信息
    1.显示自身用户名称
    			whoami		
    2.显示登录用户的用户名
    			who am i	
    2.查看当前有哪些用户登录到了本台机器上
    			who			
    	
    
    设置普通用户具有root权限
    # vi /etc/sudoers
    

    修改普通用户具有root权限

    用户组
    添加用户组
    groupadd 组名
    
    删除用户组
    groupdel 组名
    
    修改用户组
    groupmod -n 新组名 老组名
    

    常用基本命令

    文件目录操作命令
    显示当前工作目录的绝对路径
    pwd	
    
    列出目录的内容
    ls
    
    创建一个新的目录
    mkdir 目录名
    
    删除一个空的目录
    rmdir 目录名
    
    创建一个空的文件
    touch 文件名
    
    复制文件
    1.复制source文件到dest
    		cp source dest
    2.递归复制整个文件夹
    		cp -r sourceFolder targetFolder
    
    删除目录(慎用!!!)
    1.删除空目录
    		rmdir  dirname
    2.递归复制整个文件夹
    		rm -rf  dirname
    		
    
    移动文件
    1.重命名
    		mv oldNameFile newNameFile	
    2.移动文件
    		mv /temp/movefile    /targetFolder
    		
    
    查看文件
    cat  [选项] 要查看的文件
    	选项:
    	-A :相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
    	-b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
    	-E :将结尾的断行字节 $ 显示出来;
    	-n :列出行号,连同空白行也会有行号,与 -b 的选项不同;
    	-T :将 [tab] 按键以 ^I 显示出来;
    	-v :列出一些看不出来的特殊字符
    		
    

    tail (可以实时追踪文件的所有更新,例如查看tomcat的log日志)

    1.查看文件头10行内容,10可以是任意行数
    	tail  -n 10 文件
    2.实时追踪该档的所有更新
    	tail  -f  文件
    
    
    echo
    1.将要显示的内容,存储到文件中
    		 echo 要显示的内容 >> 存储内容的的文件
    2.显示变量的值
    		echo 变量
    
    文件权限命令

    文件属性:

    文件属性

    文件类型 属主权限 属组权限 其他用户权限
    0 1 2 3 4 5 6 7 8 9
    目录文件 读 写 执行 读 写 执行 读 写 执行

    rxw作用文件和目录的不同解释
    (1)作用到文件:
    [ r ]代表可读(read): 可以读取,查看
    [ w ]代表可写(write): 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录 有写权限,才能删除该文件.
    [ x ]代表可执行(execute):可以被系统执行
    (2)作用到目录:
    [ r ]代表可读(read): 可以读取,ls查看目录内容
    [ w ]代表可写(write): 可以修改,目录内创建+删除+重命名目录
    [ x ]代表可执行(execute):可以进入该目录

    修改权限
    chmod  [{ugoa}{+-=}{rwx}] [文件或目录] [mode=421 ]  [文件或目录] 
    
    chmod 777 /opt/softwear
    
    -R 可以为指定文件夹下的所有文件及目录设置权限
    
    chmod -R 777 /opt/softwear   
    
    改变文件所属用户组
    chgrp [最终用户组] [文件或目录]	(功能描述:改变文件或者目录的所属组)
    
    改变文件所有者
    chown [最终用户] [文件或目录]	(功能描述:改变文件或者目录的所有者)
    
    压缩解压缩命令
    gzip/gunzip压缩
    
    	1)基本语法:
    		gzip+文件		(功能描述:压缩文件,只能将文件压缩为*.gz文件)
    		gunzip+文件.gz	(功能描述:解压缩文件命令)
    	2)特点:
    		(1)只能压缩文件不能压缩目录
    		(2)不保留原来的文件
    
    tar打包
    tar打包
    		tar + 参数 + XXX.tar.gz + 将要打包进去的内容		(功能描述:打包目录,压缩后的文件格式.tar.gz)
    			参数:
    			-c 产生.tar打包文件
    			-v 显示详细信息
    			-f 指定压缩后的文件名
    			-z 打包同时压缩
    			-x 解包.tar文件
    
    			压缩
    				tar -zcvf  XXX.tar.gz   n1.txt    n2.txt
    			解压
    				tar -zxvf  XXX.tar.gz
    
    zip/unzip压缩
    	1)基本语法:
    		zip + 参数 + XXX.zip + 将要压缩的内容 (功能描述:压缩文件和目录的命令,window/linux通用且可以压缩目录且保留源文件)
    			参数:
    			-r 压缩目录
    		
    			压缩
    				zip XXX.zip  a.txt b.txt
    			解压
    				unzip XXX.zip
    
    后台服务管理命令
    service后台服务管理
    	1)查看指定服务的状态
    		service network status   
    	2)停止指定服务
    		service network stop    
    	3) 启动指定服务
    		service network start   
    	4)重启指定服务
    		service network restart   
    	5)查看系统中所有的后台服务
    		service --status-all      
    
    chkconfig设置后台服务的自启配置
    
    	1)查看所有服务器自启配置
    		chkconfig   			
    	2) 关掉指定服务的自动启动
    		chkconfig iptables off  
    	3)开启指定服务的自动启动
    		chkconfig iptables on   
    

    VI和VIM编辑器

    一般模式
    	常用语法
    		1)yy		(功能描述:复制光标当前一行)
    		    y数字y	(功能描述:复制一段(从第几行到第几行))
    		2)p		(功能描述:箭头移动到目的行粘贴)
    		3)u		(功能描述:撤销上一步)
    		4)dd		(功能描述:删除光标当前行)
    		   d数字d	(功能描述:删除光标(含)后多少行)
    		5)x		(功能描述:删除一个字母,相当于del)
    		      X		(功能描述:删除一个字母,相当于Backspace)
    		6)yw		(功能描述:复制一个词)
    		7)dw		(功能描述:删除一个词)
    		8)shift+^	(功能描述:移动到行头)
    		9)shift+$	(功能描述:移动到行尾)
    		10)1+shift+g		(功能描述:移动到页头,数字)
    		11)shift+g			(功能描述:移动到页尾)
    		12)数字N+shift+g	(功能描述:移动到目标行)
    
    编辑模式
    	常用语法
    		1)进入编辑模式
    			(1)i    当前光标前
    			(2)a    当前光标后
    			(3)o    当前光标行的下一行
    		2)退出编辑模式
    			按『Esc』键
    
    指令模式
    	常用语法
    		(1): 
    			选项:
    			  w	保存
    			  q	退出
    			  !  感叹号强制执行
    		(2)/  
    			查找,/被查找词,n是查找下一个,shift+n是往上查找
    		(3)?  
    			查找,?被查找词,n是查找上一个,shift+n是往下查找
    		案例
    

    RPM命令

    查询
    1)基本语法:
    (1)rpm -qa				(功能描述:查询所安装的所有rpm软件包)
    过滤
    rpm -qa | more
    	rpm -qa | grep X
    	rpm -qa | grep -I 软件名
    (2)rpm -q 软件包名		(功能描述:查询软件包是否安装)
    (3)rpm -qi 软件包名		(功能描述:查询软件包信息)
    (4)rpm -ql 软件包名		(功能描述:查询软件包中文件)
    (5)rpm -qf 文件全路径名	(功能描述:查询文件所属的软件包)
    	 rpm -qf /etc/passwd
    	 rpm -qf /root/install.log
    (6)rpm -qp 包文件名	(功能描述:查询包的信息对这个软件包的介绍)
    	 rpm -qp jdk-1_5_0-linux-i586.rpm
    	 rpm -qpi jdk-1_5_0-linux-i586.rpm
    	 rpm -qpl jdk-1_5_0-linux-i586.rpm
    
    
    安装
    1)基本语法:
    	rpm -ivh RPM包全名
    		-i=install,安装
    		-v=verbose,显示详细信息
    		-h=hash,进度条
    		--nodeps,不检测依赖进度
    rpm -ivh  XXXX.rpm
    
     卸载
    1)基本语法:
    (1)rpm -e RPM软件包   
    (2) rpm -e --nodeps 软件包  
    --nodeps 如果该RPM包的安装依赖其它包,即使其它包没装,也强迫安装。
    
    

    shell编程

    概述

    Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
    Shell还是一个功能相当强大的编程语言,易编写、易调试、灵活性强。Shell是解释执行的脚本语言,在Shell中可以调用Linux系统命令。

    shell脚本的执行方式

    1)echo输出命令
    (1)基本语法:
    echo [选项] [输出内容]
    选项:
    -e: 支持反斜线控制的字符转换

    控制字符 作 用
    输出本身
    a 输出警告音
     退格键,也就是向左删除键
    c 取消输出行末的换行符。和“-n”选项一致
    e ESCAPE键
    f 换页符
    换行符
    回车键
    制表符,也就是Tab键
    v 垂直制表符
    nnn 按照八进制ASCII码表输出字符。其中0为数字零,nnn是三位八进制数
    xhh 按照十六进制ASCII码表输出字符。其中hh是两位十六进制数

    2)案例

    # echo "HELLO WORLD"
    HELLO WORLD
    

    2)第一个Shell脚本
    创建一个Shell脚本,输出helloworld、

    #!/bin/bash   
    echo "helloworld"
    
    脚本的常用执行方式

    第一种:输入脚本的绝对路径或相对路径
    (1)首先要赋予 helloworld.sh 脚本的+x权限
    chmod 777 helloworld.sh
    (2)执行脚本
    /root/helloWorld.sh 或者 ./helloWorld.sh
    第二种:bash或sh+脚本(不用赋予脚本+x权限)
    sh /root/helloWorld.sh 或者 sh helloworld.sh

    shell中的变量

    1)Linux Shell中的变量分为“系统变量”和“用户自定义变量”,可以通过set命令查看系统变量。
    2)系统变量 :$HOME、$PWD、$SHELL、$USER等等
    3)显示当前shell中所有变量:set

    定义变量

    1)基本语法:
    变量=值
    2)变量定义规则
    (1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
    (2)等号两侧不能有空格
    (3)变量名称一般习惯为大写
    (4)双引号和单引号有区别,双引号仅将空格脱意,单引号会将所有特殊字符脱意

    STR=“hello world”
    A=8			定义变量A
    unset A       撤销变量A
    readonly B=2  声明静态的变量B=2,不能unset
    export变量名  可把变量提升为全局环境变量,可供其他shell程序使用
    
    
    将命令的返回值赋给变量
    A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量A
    A=$(ls -la) 等价于反引号
    
    设置环境变量
    1)基本语法:
    	export 变量名=变量值		(功能描述:设置环境变量的值)
    	echo $变量名				(功能描述:查询环境变量的值)
    	source 配置文件			(功能描述:让修改后的配置信息立即生效)
    2)案例:
    	在/etc/profile文件中定义JAVA_HOME环境变量
    	export JAVA_HOME=/opt/module/jdk1.7.0_79
    	export PATH=$PATH:$JAVA_HOME/bin
    
    查看环境变量JAVA_HOME的值
    	echo $JAVA_HOME
    
    
    位置参数变量

    1)基本语法
    $n (功能描述:n为数字,$0代表命令本身, $1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})
    $* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
    $@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
    $# (功能描述:这个变量代表命令行中所有参数的个数)

    1)计算输入的参数1和参数2的两个数的和,并输出到控制台

    #!/bin/bash 
    num1=$1 
    num2=$2 
    sum=$(( $num1 + $num2)) 
    #变量sum的和是num1加num2 
    echo $sum 
    #打印变量sum的值
    
    

    2)打印输入的参数总数、所有参数

    #!/bin/bash 
    echo "A total of $# parameters" 
    #使用$#代表所有参数的个数 
    echo "The parameters is: $*" 
    #使用$*代表所有的参数 
    echo "The parameters is: $@" 
    #使用$@也代表所有参数 
    
    

    3)$*$@的区别

    #!/bin/bash 
    for i in "$*" 
    #$*中的所有参数看成是一个整体,所以这个for循环只会循环一次 
            do 
                    echo "The parameters is: $i" 
            done 
    x=1 
    for y in "$@" 
    #$@中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次 
            do 
                    echo "The parameter$x is: $y" 
                    x=$(( $x +1 )) 
            done
    
    

    a)$*$@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 $2 …$n的形式输出所有参数
    b)当它们被双引号“”包含时,“$*”会将所有的参数作为一个整体,以“$1 $2 …$n”的形式输出所有参数;“$@”会将各个参数分开,以“$1” “$2”…”$n”的形式输出所有参数

    预定义变量

    1)基本语法:
    $? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
    $$ (功能描述:当前进程的进程号(PID))
    $!(功能描述:后台运行的最后一个进程的进程号(PID))

    #!/bin/bash 
    #输出当前进程的PID,这个PID就是当前这个脚本执行时,生成的进程的PID
    echo "The current process is $$" 
    
    #使用find命令在root目录下查找hello.sh文件,符号&的意思是把命令放入后台执行
    find /root -name hello.sh & 
     
    echo "The last one Daemon process is $!"
    
    echo "$?"
    
    
    运算符
    1)基本语法:
    (1)“$((运算式))”或“$[运算式]”
    (2)expr m + n 
    注意expr运算符间要有空格
    2)案例:计算(2+3)X4的值
    	(1)采用$[运算式]方式
    	[root@hadoop102 datas]# S=$[(2+3)*4]
    [root@hadoop102 datas]# echo $S
    	(2)expr分布计算
    		S=`expr 2 + 3`
    		expr $S * 4
    	(3)expr一步完成计算
    		expr `expr 2 + 3` * 4
    		echo `expr \`expr 2 + 3\`*4`
    
    
    条件判断
    判断语句
    1)基本语法:
    [ condition ](注意condition前后要有空格)
    #非空返回true,可使用$?验证(0为true,>1为false)
    2)案例:
    [atguigu] 	返回true
    [] 			返回false
    [condition] && echo OK || echo notok 			条件满足,执行后面的语句
    
    
    常用判断条件
    1)两个整数之间比较
    		= 字符串比较
    		-lt 小于
    		-le 小于等于
    		-eq 等于
    		-gt 大于
    		-ge 大于等于
    		-ne 不等于
    2)按照文件权限进行判断
    		-r 有读的权限
    		-w 有写的权限
    		-x 有执行的权限
    3)按照文件类型进行判断
    		-f 文件存在并且是一个常规的文件
    		-e 文件存在
    		-d 文件存在并是一个目录
    4)案例
    		[root@localhost ~]# [ 23 -ge 22 ]
    		[root@localhost ~]# [ -w student.txt ]
    		[root@localhost ~]# [ -e /root/install.log ]
    
    
    流程控制
    if判断
    1)基本语法:
    if [ 条件判断式 ];then 
      程序 
    fi 
    或者 
    if [ 条件判断式 ] 
      then 
        程序 
    fi
    	注意事项:(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
    
    
    #!/bin/bash
    read -p “please input your name:” NAME
    #printf ‘%s
    ’ $NAME
    if[ $NAME = root ]
    then 
        echo “hello ${NAME}, welcome !”
    elif [ $NAME = atguigu]
        then
            echo “hello ${NAME}, welcome !”
    else
        echo “sorry ”
    fi
    
    
    case语句
    1)基本语法:
    case $变量名 in 
      "值1") 
        如果变量的值等于值1,则执行程序1 
        ;; 
      "值2") 
        如果变量的值等于值2,则执行程序2 
        ;; 
      …省略其他分支… 
      *) 
        如果变量的值都不是以上的值,则执行此程序 
        ;; 
    esac
    
    

    案例:

    case $1 in
    start)
    	echo “starting”
    	;;
    stop)
    	echo “stoping”
    	;;
    *)
    	echo “Usage:{start|stop}”
    esac
    
    
    for循环
    1)基本语法1:
    for 变量 in 值1 值2 值3… 
      do 
        程序 
      done
    
    

    案例:
    (1)打印时间

    #!/bin/bash 
    #打印时间 
    
    for time in morning noon afternoon evening 
            do 
                    echo "This time is $time!" 
            done 
    
    
    基本语法2:
    	for (( 初始值;循环控制条件;变量变化 )) 
      do 
        程序 
      done
    
    

    从1加到100

    #!/bin/bash 
    #从1加到100 
    
    s=0 
    for (( i=1;i<=100;i=i+1 )) 
            do 
                    s=$(( $s+$i )) 
            done 
    echo "The sum is : $s"
    
    
    while循环
    基本语法:
    while [ 条件判断式 ] 
      do 
        程序 
      done
    
    

    从1加到100

    #!/bin/bash 
    #从1加到100 
    
    i=1 
    s=0 
    while [ $i -le 100 ] 
    #如果变量i的值小于等于100,则执行循环 
            do 
                    s=$(( $s+$i )) 
                    i=$(( $i+1 )) 
            done 
    echo "The sum is: $s"
    
    
    read读取控制台输入

    1)基本语法:
    read(选项)(参数)
    选项:
    -p:指定读取值时的提示符;
    -t:指定读取值时等待的时间(秒)。
    参数
    变量:指定读取值的变量名

    $ read -p "please input your name:" NAME
    
    
    
    函数
    系统函数

    1)basename基本语法
    basename [pathname] [suffix]
    basename [string] [suffix] (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
    选项:
    suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。

    $ basename /opt/test.txt 
    test.txt
    
    $basename /opt/test.txt .txt
    test
    
    

    2)dirname基本语法
    dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))

    $ dirname /opt/test.txt 
    /opt
    
    自定义函数

    1)基本语法:

    	[ function ] funname[()]
    	{
    		Action;
    		[return int;]
    	}
    	
    	function start() / function start / start()
    
    

    注意:
    (1)必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译。
    (2)函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)

    案例:打印出比你输入小的所有数(单参)

     #!/bin/bash   
    function LoopPrint()    
    {    
        count=0;    
        while [ $count -lt $1 ] ;    
        do    
    		echo $count;  	
    		expr ++count;  
    		sleep 1;    
        done    
        return 0;    
    }  
    read -p "Please input the number: " n;    
    LoopPrint $n;  
    

    多参

    #!/bin/bash   
    function LoopPrint()    
    {    
        echo $2  
        count=0;    
        while  [ $count -lt $1 ];    
        do    
    		echo $count;    
    		expr ++count;    
    		sleep 1;    
        done    
        return 0;    
    }  
    read -p "Please input the num1: " n;    
    read -p "Please input the num2: " m;  
    LoopPrint $n $m;
    
    

    本博客仅为博主学习总结,感谢各大网络平台的资料。蟹蟹!!

  • 相关阅读:
    印度、日本、美国和国内的软件企业的“软件态度”
    限制文本框每行输入的字符数的C#代码
    之我见:没有像样的需求分析、设计就草草开始分块写代码
    Excel 加载项的怪现象
    Excel加载项Dotfuscator注意点
    设计者应增加对本机缓存特性的注意度
    我们的产品有技术含量吗?
    阳光行为,阳光心情
    Google在中国境内设服务器?速度快极了!
    标准重要不重要:标准目录查询网页竟有这样的语句:见证中国目前的软件开发水平
  • 原文地址:https://www.cnblogs.com/shaofeer/p/11154328.html
Copyright © 2011-2022 走看看