ubuntu及shell脚本常用命令入门

一、Shell命令
二、ubuntu软件安装方法
三、Ubuntu文件系统结构
四、ubuntu磁盘文件
五、Linux下常用的压缩格式
六、linux用户和用户组
七、Ubuntu/Linux文件权限
八、linux连接文件
九、vim编辑器
十、linux C编程
十一、Makefile的基本语法
十二、shell脚本入门

一、Shell命令
查看命令详细信息 命令 --help

1、目录信息查看命令ls 
	ls -a 显示目录所有文件及文件夹,包括隐藏文件,比如以.开头的
    ls -l 显示文件的详细信息 文件名后*代表可执行文件
    ls 目录 查看某一目录下的文件
    ls test/* 查看test目录下所有文件及子文件
2、目录切换命令                 cd 
    tab键补全目录剩余信息
3、当前路径显示命令             pwd
4、系统信息查看命令             uname
    uname -a 查看系统版本内核等详细信息
5、清理屏幕命令                 clear
6、显示文件内容命令             cat
    cat /etc/profile
7、切换用户身份命令             sudo
    sudo apt-get install mplayer
8、文件拷贝命令                 cp
    cp a.c b.c  ->把a.c拷贝到b.c
    cp -r test1 test2 复制test1目录到test2目录
9、切换用户命令                 su
    sudo su 切换管理员身份
    sudo su zkh 切换回用户身份
10、移动文件命令                mv
    mv a.c b.c 可用于文件的重命名
    mv test/ test1/ 重命名文件夹
    mv a.c test1/
11、创建文件夹命令              mkdir
    mkdir test
12、创建文件命令                touch
    touch a.c
13、删除命令                    rm
    rm a.c 删除a.c文件
    rm 目录 -f 强制删除 删除不询问...
            -r 递归删除 把目录及子目录文件全都删除 不然无法删除目录
            -rf 可删除文件夹 或使用 rmdir
14、目录删除命令                rmdir
15、显示网络配置信息命令        ifconfig
    可显示网卡信息
    ifconfig -a 查看所有网卡的信息
    sudo ifconfig 网卡名 up     挂载网卡
    sudo ifconfig 网卡名 down   禁用网卡
    sudo ifconfig 网卡名 IP地址 修改IP地址
    ifconfig --help 查看命令帮助
16、重启命令                    reboot
17、关机命令                    poweroff
18、系统帮助命令                man
    man printf 查看printf函数的详细信息
    快速查询系统详细设计文件
    --help只显示一部分 man为查看完整的设计文件
19、数据同步写入磁盘命令        sync
    将缓冲区中的数据写入磁盘 以免在拔出磁盘的时候 缓冲区的数据尚未写入
20、查找文件命令                find
    find -name 文件名 查找当前目录及子目录下文件所在位置
21、查找内容命令                grep
    grep -r 查找文件夹下所有子文件内容中符合的内容
        -n 标出符合那一行的列数
        -i 忽略大小写
    grep -nr "ubuntu" /
             查找内容  查找目录
22、文件夹大小查看命令          du
    du -sh 查看目录/文件占用磁盘空间大小 不显示子目录
        -s 查看目录占用磁盘空间大小 不显示子目录和文件
        -h 以人类可读的方式显示占用磁盘空间大小
    du 目录 查看目录及子目录
23、磁盘空间检查命令            df
    df -h 查看磁盘空间 以人类可读方式
24、使用gedit打开某个文件命令   gedit
    gedit为软件 使用图形化界面进行文件的编辑
    gedit a.c
25、当前的系统进程查看命令      ps
    ps -aux 显示包含所有其他使用者的进程
    嵌入式一般为单用户 因此一般使用ps 就行
    具体请查看man ps
26、进程实时运行状态查看命令    top
27、文件类型查看命令            file
    一般在ubuntu上编译arm上运行的软件 需要查看下编译后的文件类型
    可执行文件会显示给x86 还是arm运行
    file a.c

二、ubuntu软件安装方法
1、apt工具安装 (常用)

    sudo apt-get install 软件名称
    sudo apt-get install git
    sudo apt-get install mplayer

2、deb软件包安装 (大型图形界面软件)

    在windows下安装为.exe文件 在ubuntu下则为.deb文件 可以直接双击安装
    sudo dpkg -i xxx.deb
    安装网易云音乐,

3、源代码安装 (较少)

    (1)、百度下载tree源代码压缩包
    (2)、解压
    (3)、阅读readme 或install 查看如何安装
    (4)、make 编译
    (5)、sudo make install 安装
    (6)、测试 tree --help
    有些软件可能需要make config再安装

4、app store
5、其他安装方法
QT安装 扩展名.run 得先安装IDE 百度

三、Ubuntu文件系统结构

    /bin 	存放二进制可执行文件,这些命令在单用户模式下也能够使用。可以被root和一般的账号使用。
    /boot	Ubuntu内核和启动文件,比如vmlinuz-xxx。gurb引导装载程序。 
        /grub 用来启动ilnux
        vmlinux-4.15.0 linux内核文件
    /cdrom 因该是用来放光盘中的文件
    /dev		设备驱动文件
        嵌入式开发时 设备的驱动文件存放位置 对设备进行操作也是通过文件进行操作
        sda 磁盘文件 想写磁盘的话 直接对文件进行操作
    /etc		存放一些系统配置文件,比如用户账号和密码文件,各种服务的起始地址。
        profile文件 用于存放环境变量的一些配置
	/home	系统默认的用户主文件夹,一般创建用户账户的时候,默认的用户主文件夹都会放到此目录下。
        zkh/ 
            lib/ 系统运行所需库
                x86_64-linux-gnu/ 
                    .so linux下的一些动态库
	/lib		存放库文件
	/media	此目录下放置可插拔设备,比如SD卡,或者U盘就是挂载到这个目录中。
        zkh/ 查看可插拔设备
    /mnt	用户可使用的挂载点,如果要挂载一些额外的设备,那么就可以挂载到此处。
        hgfs/ 可用来与windows系统作为共享文件夹
    /opt		可选的文件和程序存放目录,给第三方软件放置的目录。
    /root	root用户目录,也就是系统管理员目录。
	/sbin	和/bin类似,也是存放一些二进制可执行文件。sbin下面的一般是系统开机过程中所需要的命令。
    /snap   包管理工具
	/srv		服务相关目录。比如网络服务。
	/sys		记录内核信息,虚拟文件系统。
	/tmp	临时目录
	/var		存放一些变化的文件,比如日志文件
	/usr		usr不是user的缩写,而是UNIX Software Resource的缩写,存放与系统用户有关的文件,会占用很大的存储空间!
	/proc	虚拟文件系统,数据放置到内存中,存放系统运行信息
        cat proc/cpuinfo 查看cpu信息

四、ubuntu磁盘文件
u盘格式设为FAT32 适合嵌入式linux

1、ubuntu磁盘文件
    /dev/sd*文件,此类文件是磁盘设备文件,并不能直接访问磁盘,必须要将磁盘挂载到某一个目录下才可以访问。
    /dev/sdb和/dev/sdb1是U盘的设备文件。
    /dev/sdb表示U盘,/dev/sdb1表示U盘的第一个分区。

    cd /dev
    ls sd* 列出磁盘文件

2、磁盘和目录的容量查询命令
    df:列出文件系统的整体磁盘使用量。主要查看个文件系统的使用量,
    du:评估文件系统的磁盘使用量,主要查看单个文件的大小。
    du -h 显示u盘下所有文件(包括子文件)的空间使用量
    du -h --max-depth=1 只显示一层的目录空间使用情况

3、磁盘挂载与卸载,分区和格式化、
    1、磁盘的挂载和卸载
        dev为设备的连接 media为挂载点

        mount和umount命令
        视频中没卸载成功 哈哈 打开了文件怎么会卸载成功呢
        sudo umount 目录 目录为/media/zkh/中的文件名
            -f 强制卸载 不用也行

        cd /media/zkh/
        sudo mkdir 新建挂载点
        挂载只能挂实际内容sdb1 不能sdb
        sudo mount /dev/sdb1 /media/zkh/udisk/ 将sdb1挂载到udisk文件夹下
            -o iocharset=utf8 解决文件名中文乱码问题 不用也行
    2、磁盘分区
        fdisk命令
        sudo fdisk -l 查看磁盘分区
        sudo fdisk /dev/sdb 进入操作帮助进行磁盘操作
        p为主分区 e为可用空间
        操作后需要保存 如果删除u盘分区则有时候需要把u盘卸载
        创建中的扇区表示空间大小的区间
        创建后有时候需要格式化才能挂载

    3、磁盘格式化
        磁盘分区创建好以后就可以格式化磁盘,使用命令mkfs。如:
        sudo mkfs -t vfat /dev/sdx
            -t 所安装的文件系统类型
        分区后windows系统下就可以看到几个u盘分区
        删除分区
            windows下可以通过SDFormat软件将磁盘分区删除 
            也可以在linux下把分区删除在重新创建一个大的分区

五、Linux下常用的压缩格式
–help 查看各参数帮助信息
1、Linux下常用的压缩扩展名有:.tar、.tar.bz2、.tar.gz。

2、Windows下7ZIP软件的安装
    安装7ZIP
    因为Linux下很多文件是.bz2,.gz结尾的压缩文件,因此需要在windows下安装7ZIP软件。
    可通过将文件压缩为tar后再压缩为tar.bz2

3、gzip压缩工具      只会对文件进行压缩(能递归压缩文件夹) 不会进行打包
    .gzip工具负责压缩和解压缩.gz格式的压缩包。
    gzip xxx			//压缩 a.c 文件会压缩为a.c.gz
    gzip -d xxx.gz	    //解压缩 a.c.gz文件会解压缩为a.c

    gzip对文件夹进行压缩
    gzip -r xxx		//对文件夹进行压缩
    gzip -rd xxx.gz	//对文件夹进行解压缩

    gzip虽然可以对文件夹进行压缩,但是并不能提供打包的服务,只是对文件夹中的所有文件进行了单独的压缩。
    对于文件夹来说并不压缩 只压缩文件夹下的文件。
4、bzip2压缩工具     只会对文件进行压缩(不能递归压缩文件夹) 不会进行打包
    和gzip类似,只是bzip2工具负责压缩和解压缩.bz2格式的压缩包。
    bzip2 -z xxx			//压缩   a.c 文件会压缩为a.c.bz2
    bzip2 -d xxx.bz2        //解压缩 a.c.bz2文件会解压缩为a.c

5、tar打包工具
    tar工具参数:
        -f,使用归档文件或 ARCHIVE 设备 使用归档的名字(一般放于最后)
        -c:创建新归档,创建压缩文件
        -x:从归档中解出文件,解压缩
        -j:使用bzip2压缩格式。
        -z:使用gzip压缩格式
        -v:打印出命令执行过程。
    参数的顺序有要求

    tar工具提供打包服务,就是将多个文件打包,比如
    tar -vcf test.tar test	//将test打包成test.tar
    tar -vxf test.tar		//解包

    上面的tar命令只提供了打包和解包的功能,tar在提供打包和解包的同时使用gzip/bzip2进行压缩,实现类似windwos下winRAR软件的命令。
    
    1、对.tar.bz2进行压缩和解压缩
    tar -vxjf xxx.tar.bz2	解压缩
    tar -vcjf xxx.tar.bz2 xxx 压缩

    2、对.tar.gz进行压缩和解压缩
    tar -vxzf	xxx.tar.gz		//解压缩
    tar -vczf xxx.tar.gz xxx 	//压缩
 
6、其他格式的压缩和解压缩
    1、.rar格式 查找帮助直接rar 不用--help
    需要先安装rar:sudo apt-get install rar
    rar x xxx.rar		//解压缩
    rar a xxx.rar xxx	//压缩

    2、.zip格式 查找帮助直接rar 不用--help
    zip格式压缩使用“zip“命令:
    zip -rv xxx.zip xxx
    
    zip格式解压缩使用“unzip”命令:
    unzip xxx.zip       //解压文件
    unzip -v xxx.zip    //只查看压缩文件内容 不解压

六、linux用户和用户组
1、用户
Linux是一个多用户操作系统,不同的用户拥有不同的权限。可以查看和操作不同的文件。 Ubuntu有三种用户:
1、初次创建的用户。 2、root用户 3、普通用户。
初次创建的用户权限比普通用户多,但是没有root用户多。

    Linux用户记录在/etc/passwd这个文件内。
    Linux用户密码记录在/etc/shadow这个文件内。
    每个用户都有一个ID,叫做UID。
2、用户组
    为了方便管理,将用户进行分组。这样就可以设置非本组人员不能访问某些文件。每个用户可以属于多个不同的组。

    用户:家里有你、弟弟、妹妹个人,每个人都有自己的房间,你们三个人都是用户,你们都不能随便的乱翻别人的房间。
    用户组:你们三个都是一个家庭的,也就是属于同一个用户组,你们三个可以共用厨房,书房等空间。

    用户组为共享给组内用户公共资源 并不影响用户的私人资源
    一个用户可加入多个组

        因此:
        用户和用户组的存在就是为了控制文件的访问权限的。
        每个用户组都有一个ID,叫做GID。

        用户组及用户信息存储在/etc/group文件中。
            组名 密码 ID 包含的用户
            用户及用户组共用一套ID即 用户和用户组排在同一ID序列中
3、创建用户和用户组
    (1)、图形化界面创建
        要使用图形化界面创建用户和用户组的话就需要安装gnome-system-tools这个工具:
        sudo apt-get install gnome-system-tools
    (2)、命令创建用户和用户组 要加sudo
        添加用户:adduser命令,adduser 用户名
        用户查询:finger命令,finger 用户名
        修改用户密码:passwd命令,passwd 用户名
        删除用户:deluser命令,deluser 用户名

        添加用户组:addgroup命令,addgroup 用户组名
        显示用户所属用户组:groups命令,groups 用户名
        删除用户组:delgroup命令,delgroup用户组名
        
        可通过修改用户权限、修改/etc/group、图形等方式把用户添加到用户组中

    命令创建可以只有三位密码 图形不行
    修改密码只能在所在的用户中 或sudo

七、Ubuntu/Linux文件权限
1、文件权限是指不同的用户或用户组对某个文件拥有的权限,文件的权限分为三种:
r: 读 w:写 x:可执行。 文件描述形式如下: -rw-rw-r—就是文件权限,第一位表示文件类型,剩下的每三位表示一组权限。分别对应拥有者权限、拥有者所在组权限、其他用户权限。
可以使用二进制表示文件权限。

       r=4
       w=2
       x=1
    a.c文件信息:
        --rw-rw-r--,a.c所属用户拥有读写权限无可执行权限。组内其他用户拥有读写权限无可执行权限,其他用户仅有可读权限。
        zkh zkh 用户 用户组
    ls -l /dev列出文件的详细信息
        列出的开头第一个字母为文件类型
            b 块文件
            c 字符文件
2、Ubuntu/Linux文件权限修改
    1、修改文件权限命令
        chmod命令
        777 开放所有权限
        a 所有用户
        u 归属用户
        g 归属组
        o 其他用户
        w r x 权限
        u+x 所属用户添加执行权限

        chmod 777 文件名
    2、修改文件所属用户
        chown命令
        
        sudo chown root 文件名   将文件所属用户修改为root
        sudo chown .root 文件名  将文件所属组改为root
        sudo chown root.root 文件名 文件所属用户所属组一起修改为root
        sudo chown -R root.root 文件夹 文件夹中所有的文件一起修改

        文件中本用户无法执行 组外用户可执行 把文件所属用户调为组外用户 本用户即可执行

所有用户都具有w权限时 文件名会高亮

gcc hello.c -o hello 编译c文件 输出hello为可执行文件

八、linux连接文件
Linux有两种连接文件:符号连接(软连接)和硬链接,符号链接类似Windows下的快捷方式。硬链接通过文件系统的inode连接来产生新文件名,而不是产生新文件。
inode:记录文件属性,一个文件一个inode。inode相当于文件ID,查找文件的时候要先找到inode,然后才能读出文件的内容。

二、ln命令
    ln命令用于创建连接文件:
    ln [选项] 源文件 目标文件
        选项:-s 创建符号链接(软连接)
        -f 强制创建连接文件,如果目标存在,那么先删除掉目标文件,然后再建立连接文件。
三、硬连接
    硬链接是多个文件都指向同一个inode,硬链接知识点:
    ①、具有相同inode的多个文件互为硬链接文件,创建硬链接相当于文件实体多了入口。
    ②、对于硬链接文件,只有删除了源文件以及对应的所有硬连接文件,文件实体才会被删除。
    ③、根据硬链接文件的特点,我们可以通过给文件创建硬连接的方式来防止文件误删除。
    ④、不论修改源文件还是连接文件,另一个文件的数据都会被改变。 (与源文件占用大小相同)
    ⑤、硬连接不能跨文件系统。
    ⑥、硬连接不能连接到目录。

    ln 文件名 连接文件名

相当于把文件复制后相关联起来,方便多地操作
因为以上这些限制,硬链接其实不常用。
四、符号连接(软连接) 类似于指针
    符号连接类似Windows下的快捷方式,符号链接也叫做软连接,软连接要用的多。符号连接相当于创建了一个独立的文件,这个文件会让数据读取指向它连接的哪个文件的文件名。软连接的特点:
    ①、可以连接到目录。
    ②、可以跨文件系统。
    ③、删除源文件以后,软连接文件也就“打不开了”。
    ④、符号连接文件通过->来指示具体的连接文件。
    ⑤、符号连接要使用绝对路径,否则连接出问题。 当cp的使用要用-d 且如果不是绝对路径 赋值后文件无效

    cp的时候要把目录下保持所有文件的连接 就要-d 否则文件将复制 且链接文件要使用绝对路径 

    ln -s 文件绝对路径 连接文件名
    绝对路径~也可使用

之前jupyter操作目录下的其他地方的磁盘文件就是依照此原理
文件类型为l
ll == ls -l
    -i 查看文件连接

九、vim编辑器
Linux系统都会自带vi编辑器,但是vi编辑器太难用了!所以建议大家安装vim编辑器,安装命令:
sudo apt-get install vim

1、vim编辑器三种工作模式
    vi xxx	使用vi编辑器打开文件。

    一般模式(指令模式):默认模式,用vi打开一个文件以后自动进入到此模式。
    编辑模式:一般模式中无法编辑文件,要编辑文件就要进入编辑模式,按下“i、I、a、A、o、O、s、r”等就会进入到编辑模式。一般按下“a”进入编辑模式。按下ESC键可退出编辑模式。
    命令行模式(底行模式):先进入到一般模式,然后输入:、/、?这三个中的任意一个就可以进入到命令行模式。
    /xxx,表示在文件中查找xxx

    视频用a 不过个人习惯用i
    详情可看开发板的开发手册

    【注意】(不建议)如果不正常退出 可删除.文件名.swp 但之前编辑的文件内容也会删除 
2、保存退出
    当文件编辑好以后,输入:wq来保存退出。:q退出,:q!不保存退出,:w保存。
    :q退出 修改后不保存或!的话退不出去
    保存退出:wq 或:x


3、其他操作方式
    (1)、按下键盘上的上下左右键来控制光标。

    一般模式下:
    (1)、dd,删除光标所在行,ndd,删除光标所在行及其下n行。
    (2)、u,撤销,恢复上一步。
    (3)、. ,重复前一个操作。
    (4)、yy,复制光标所在行
    (5),nyy,复制光标所在向下n行,比如10yy就是复制光标下10行。
    (6),p和P,p为复制到光标下一行,P复制到光标上一行。
    (7)、屏幕上下移动
        ctrl+f ctrl+b 上下翻一页 front back
        ctrl+d ctrl+u 上下翻半页 down up

十、linux C编程
可参考开发指南第三章
1、编写C程序
使用VIM编辑器编写程序,也可以使用vscode。
1.1、设置vim编辑器

           设置vim编辑器,一个TAB=4个字节。
               sudo vi /etc/vim/vimrc
                   最后输入 set ts=4
           设置vim编译器,显示行号。
                   set nu
    1.2、编写C程序

2、编译C程序 
    使用gcc编译器编译C程序。 编译单个文件
    gcc -v 支持x86
    可在x86电脑上编译arm的文件
    gcc --help
    gcc 默认编译连接为可执行文件 生成.out文件
        -o 输出文件名
        -O 优化编译     可通过-o指定文件名
        -O2 更深层优化  可通过-o指定文件名
        -v 查看过程
    详细信息查看开发手册
    编译流程:预处理(宏) -> 汇编 -> 编译 -> 链接
    多个文件时 生成.o 用于makefile编译

    gcc main.c calcu.c input.c -o main 
    gcc -c main.c
    gcc -c calcu.c
    gcc -c input.c
    gcc main.o calcu.o input.o -o main 这样修改了哪个就可以只重新编译哪个为o
3、make工具和Makefile文件   编译整个工程文件
    当源码文件比较多的时候就不适合通过直接输入gcc命令来编译,这时候就需要一个自动化的编译工具.
    make:一般说GNU Make,是一个软件,用于将源代码文件编译为可执行的二进制文件,
        make工具主要用于完成自动化编译。make工具编译的时候需要Makefile文件提供编译文件。
        实现自动化编译 且可只编译修改项的相应文件 避免不必要的编译
    Makefile(makefile):make工具所使用的文件,Makefile指明了编译规则。
        生成(目标):需要(依赖)
            执行

        main:main.o input.o calcu.o
            gcc -o main main.o input.o calcu.o
        main.o:main.c
            gcc -c main.c
        input.o:input.c 
            gcc -c input.c 
        calcu.o:calcu.c 
            gcc -c calcu.c 
        
        clean:
            rm *.o
            rm main 

        执行 make 
            make clean
    makefile编译规则详情看开发指南

    编写一个小型的含有多个.c文件的C程序。

十一、Makefile的基本语法
变量要声明为全局
1、Makefile中的变量为字符串 可通过变量代替较长的依赖

    objects = main.o input.o calcu.o
    main: $(objects)
        gcc -o main $(objects)
    ...
    
    name = zkh
    curname = $(name)
    name = zkh2
    print:
        @echo $(curname)

    输出zkh2 Makefile中变量的值取决于他所引用的变量最后一次的有效值
        可通过:=来赋值 类似正常=赋值
    ?= 如果前面没有被赋值 则赋值 否则使用前面的赋值
    += 在字符串后面添加
2、shell命令前加@不将执行过程显示出来 也可不加
3、通配符% 自动化变量 用于批量编译 
    目标%中的内容取决于依赖%中的值
    %.o:%.c
        gcc -c $<
        命令

    $@
        规则中的目标集合,在模式规则中,如果有多个目标的话,“$@”表示匹配模
        式中定义的目标集合。
    $%
        当目标是函数库的时候表示规则中的目标成员名,如果目标不是函数库文件,
        那么其值为空。
    $<
        依赖文件集合中的第一个文件,如果依赖文件是以模式(即“%”)定义的,那么
        “$<”就是符合模式的一系列的文件集合。
    $?  
        所有比目标新的依赖目标集合,以空格分开。
    $^
        所有依赖文件的集合,使用空格分开,如果在依赖文件中有多个重复的文件,
        “$^”会去除重复的依赖文件,值保留一份。
    $+  
        和“$^”类似,但是当依赖文件存在重复的话不会去除重复的依赖文件。
    $*
        这个变量表示目标模式中"%"及其之前的部分,如果目标是 test/a.test.c,目标模
        式为 a.%.c,那么“$*”就是
4、makefile伪目标
    如clean 当工程中有名为clean的文件时就会执行失败
    解决方法:将clean声明为伪目标
        .PHONY:clean
        clean:
            ...
5、makefile函数
    不支持自定义函数 但有自带函数 具体详见光盘 -> 参考资料 -> 跟我一起写Makefile

十二、shell脚本入门
一、shell脚本入门
我们已经能够熟练的在终端中输入命令来完成一些常用的操作,但是我们都是一条一条输入命令。这样会很麻烦,
那么有没有一种方式可以将很多条命令放到一个文件里面,然后直接运行这个文件即可?肯定有,这个就是shell脚本!
shell脚本类似windows的批处理文件,shell脚本就是将连续执行的命令写成一个文件。
shell脚本提供数组、循环、条件判断的等功能。shell脚本一般是Linux运维或者系统管理员要掌握的,
作为嵌入式开发人员,只需要掌握shell脚本最基础的部分即可。

二、shell脚本写法
    shell脚本是个纯文本文件,命令从上而下,一行一行的开始执行。shell脚本扩展名为.sh。
    shell脚本第一行一定要为:
        #!/bin/bash
        表示使用bash。

三、shell脚本语法
    3.1第一个shell脚本  
        一般shell脚本文件需要添加执行权限 默认没有执行的权限
        #!/bin/bash
        echo "hello world"
    3.2、交互式shell脚本
        read。

        #!/bin/bash
        echo "input your name:"
        read name 
        echo "yourname:" $name 
                    这中间不能加+

        #!/bin/bash
        read -p "input your age and weight" age weight
        echo "your age=$age and weight=$weight"

    3.3、shell脚本的数值计算
        shell仅支持整形,数值计算使用$((表达式))。
        #!/bin/bash
        echo "input two num:"
        read -p "first num" first
        read -p "second num " second
        total=$(($first+$second))   //加号两边加空格无影响 变量的赋值=两边不能有空格
        echo "$first + $second = $total"
    3.4、test命令
        test命令用于查看文件是否存在、权限等信息,可以进行数值,字符,文件三方面的测试。

    &&和||命令:
        cmd1 && cmd2 当cmd1执行完并且正确,那么cmd2开始执行,如果cmd1执行完毕错误,那么cmd2不执行。
        cmd1 || cmd2 当cmd1执行完毕并正确,那么cmd2不执行,反之cmd2执行。
    
        //查找文件是否存在
        #!/bin/bash
        echo "input filename"
        read -p "filename" filename
        test -e $filename && echo "$filename exist" || echo "$filename not exist"

        //查看字符串是否相等
        #!/bin/bash
        echo "input two string"
        read -p "firststring" firststr
        read -p "secondstring" secondstr 
        test $firststr == $secondstr && echo "firststring == secondstring" || echo "firststring != secondstring"

    3.5、中括号[]判断符
        [  ] ==或 !=
        输入前后加空格 无论是否为变量 都需要加双引号
        [ "$firststr" == "$secondstr" ]  =两边空格不能少 不然会出错 多了倒是不会报错

        //判断字符串是否相等
        #!/bin/bash
        echo "input two string"
        read -p "firststring" firststr
        read -p "secondstring" secondstr 
        [ "$firststr" == "$secondstr" ] && echo "firststring == secondstring" || echo "firststring != secondstring"

    3.6、默认变量
        $0~$n,表示shell脚本的参数,包括shell脚本命令本身,shlle脚本命令本身为$0
        $#:#表示最后一个参数的标号。
        $@:表$1、$2、$3......

        #!/bin/bash
        echo "file name: " $0      //根据执行文件时的路径来决定 是否是绝对路径或相对路径 各自输出不同
        echo "num of param: " $#
        echo "whole param: " $@
        echo "first param: " $1
        echo "second param: " $2
四、shell注释方式
    单行 #
    多行 两处注释符号需要独立一行 两者缺一不可
        :<

你可能感兴趣的:(linux,ubuntu,shell)