ubuntu 使用哪种shell_ubuntu shell 使用密码 - CSDN
精华内容
参与话题
  • Ubuntu的一些shell命令

    2017-08-22 17:17:15
    压缩与解压.tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) --------------------------------------------- .gz 解压1:gunzip FileName.gz ...

    压缩与解压

    .tar
    解包:tar xvf FileName.tar
    打包:tar cvf FileName.tar DirName
    (注:tar是打包,不是压缩!)
    ---------------------------------------------
    .gz
    解压1:gunzip FileName.gz
    解压2:gzip -d FileName.gz
    压缩:gzip FileName
    .tar.gz 和 .tgz
    解压:tar zxvf FileName.tar.gz
    压缩:tar zcvf FileName.tar.gz DirName
    ---------------------------------------------
    .bz2
    解压1:bzip2 -d FileName.bz2
    解压2:bunzip2 FileName.bz2
    压缩: bzip2 -z FileName
    .tar.bz2
    解压:tar jxvf FileName.tar.bz2
    压缩:tar jcvf FileName.tar.bz2 DirName
    ---------------------------------------------
    .bz
    解压1:bzip2 -d FileName.bz
    解压2:bunzip2 FileName.bz
    压缩:未知
    .tar.bz
    解压:tar jxvf FileName.tar.bz
    压缩:未知
    ---------------------------------------------
    .zip
    解压:unzip FileName.zip
    压缩:zip FileName.zip DirName
    ---------------------------------------------
    .rar
    解压:rar x FileName.rar
    压缩:rar a FileName.rar DirName

    磁盘

    在终端输入df -h显示磁盘使用情况

    使用 du查看某个文件或目录占用磁盘空间的大小
    du -ah –max-depth=1 这个是我想要的结果 a表示显示目录下所有的文件和文件夹(不含子目录),h表示以人类能看懂的方式,max-depth表示目录的深度。

    du -sh : 查看当前目录总共占的容量。而不单独列出各子项占用的容量

    查看安卓服务列表

    service list

    查看电脑配置

    在窗口中输入【free -m】按enter键执行
    然后会在下面第一行的【mem:】后面的【total】下面显示你的内存总大小。

    需要先在终端输入【df】,显示的sd1就是我当前的磁盘。后面的第一个数据就是磁盘大小。

    在终端输入【cat /proc/cpuinfo】按enter执行后则显示出CPU的型号之类的信息.

    命令是【lspci |grep VGA】按enter执行,然后在下面的一行中,最后面会显示你的显卡型号.

    # uname -a               # 查看内核/操作系统/CPU信息
    # env                    # 查看环境变量
    # df -h                     # 查看各分区使用情况
    # uptime                 # 查看系统运行时间、用户数、负载 
    # cat /proc/loadavg         # 查看系统负载
    # ps -ef                    # 查看所有进程 
    # top                    # 实时显示进程状态
    # chkconfig --list          # 列出所有系统服务 
    # chkconfig --list | grep on   # 列出所有启动的系统服务

    防火墙关闭

    Ufw disable
    /etc/init.d/ufw stop/restat/start

    查看服务运行状态

    Netstat -a | grep servicename 输出空说明未开启

    安装软件

    Apt-get install softname

    删除软件

    Apt-get remove softname

    修改ip等

    Vim /etc/network/interfaces

    Ubuntu重启

    Reboot

    查找特定的句柄在文件中

    Find filename -name *.c | xargs grep “temp”

    查看安卓版本信息

    Cat /android/build/core/version_default.mk中PLATFORM_SDK_VERSION=x.x.x

    查看Ubuntu版本信息

    Cat /etc/issue uname -a

    使用ctags实现跳转

    Ctags -R
    Vim /etc/vim/vimrc
    Set tags=/folder/tags

    查看所有用户

    Cat /etc/shadow

    Mm与mmm命令

    Source /android/build/envsetup.sh
    在有Android.mk文件的目录下执行这些命令来实现编译

    安卓与Ubuntu的文件传输

    Adb +push +Ubuntu文件 +android目录

    使用samba与windows共享文件

    修改/etc/smaba/smb.conf配置文件,添加一个共享目录

    展开全文
  • 深入Ubuntu内部--SHELL使用和编程

    千次阅读 2013-06-08 11:26:29
    3.Bash是由Shell发展而来的,有比Shell更丰富的功能。如果想查看Bash的版本,可以如下: $ echo $BASH_VERSION 4.命令补齐功能,例如想打开/etc/environment文件,输入下列命令: $sudo vi /etc/e

    1,查看当前系统的所有目录

    $ ls -l

    2.查看当前系统中支持的Shell

    $ cat /etc/Shells

    3.Bash是由Shell发展而来的,有比Shell更丰富的功能。如果想查看Bash的版本,可以如下:

    $ echo $BASH_VERSION

    4.命令补齐功能,例如想打开/etc/environment文件,输入下列命令:

    $sudo vi /etc/environment

    此时可以按下Tab键补齐

    5.命令历史功能,使用history命令

    $ history [ -c |-n]

    -n:列出前n条命令

    :

    但需要再次输入指令时,可以利用命令的序列号来实现重新输入

    -c清除当前Shell里的全部历史内容

    6.命令别名功能

    利用Alias,使用方法如下:

    $ alias 别名=“原命令”

    $alias ll=‘ls -alF'

    将ls -alF ,并检查是否成功

    执行ll命令

    取消别名,并验证是否取消成功

    7.如果需要知道一个命令的用法时,可以使用"man 命令名"的方式查看,但是有些命令找不到帮助文件,因为它是Shell的内建命令。此时,如果想查看命令类型,可以使用type命令

    如果需要获得内建命令帮助,可以使用help命令,如查询cd命令的帮助:

    8.Shell一些默认的快捷键:

    Ctrl+C:停止当前的命令

    Ctrl+Z:暂停当前的命令

    Ctrl+U:清空当前命令行的内容

    Ctrl+L:清屏(类似clear)

     

     

    展开全文
  • 因为要做深度学习,所以不可避免要使用linux系统,常用的就是ubuntu了。这里可能写的比较零碎,权当做学习记录吧 一、对ubuntu系统的认识 最开始就是安装ubuntu系统,14.04需要自行配置每个盘的空间,这个可以在...

    文章目录

    因为要做深度学习,所以不可避免要使用linux系统,常用的就是ubuntu了。这里可能写的比较零碎,权当做学习记录吧

    一、对ubuntu系统的认识

    最开始就是安装ubuntu系统,14.04需要自行配置每个盘的空间,这个可以在网上搜到(比如boot需要200M,swap需要两倍于系统内存),但我以后打算直接上16系统,因为可以自动分配。

    安装并进入系统之后,看到的是一堆文件夹,这跟windows的cdef盘完全不一样,一开始真心不习惯。然而这么久以来,真正打交道的其实就以下几个文件夹:

  • home:这个文件夹下存放的是每个账户,类似于windows下的用户,点进你的账户,会跳转到一个叫做“主文件夹”的目录,它相当于一个根目录,下面包含着文件、图片、音乐等等文件夹,为了方便起见,可以把这些都改成英文名
  • usr:/usr/local是一个默认目录,通过源码编译安装的软件,往往默认头文件和库文件分别会在这个目录的include和lib目录下,例如opencv
  • 其它文件夹暂时就不用管了,不要被他们吓到了。。

    二、比较常用的shell语句

    Ctrl+Alt+T,打开一个terminal,类似于windows下的命令行。但是在ubuntu下,这个terminal几乎就是灵魂,因为ubuntu的图形界面能力很弱,主要就看terminal里面的操作了。有时候一个文件夹下有大量的图片时,直接点开看,可能都会导致死机。下面继续介绍shell命令,比较简单的ls、cd这些就不多说了

  • pwd:显示当前的路径,刚打开terminal时,默认进入的是用户根目录,路径就是/home/yourname
  • cd /和cd ~:分别是进入系统根目录、进入用户根目录,有个比较危险的命令,sudo rm -rf /*,自行体会
  • ln -s src dst:给src创建软链接,软链接的名字叫dst,我感觉这个软链接就类似于windows里面的快捷方式
  • ll(ls -al):显示当前目录下所有的软连接信息,也有文件的基本信息
  • apt-get autoclean:已经删除的软件,残留的安装包文件,通过这个命令可以删除 apt-get clean:已经安装的软件,它的安装包文件已经不需要了,通过这个命令可以删除
  • apt-get (–purge) remove software:(彻底)卸载通过apt-get安装的software
  • df -h:查看各个盘的总空间、已用空间、剩余空间大小
  • du -h xxx:查看xxx文件的大小
  • du -h - -max_depth=1:(注意max前面的两个减号是连在一起的,这里为了看得清楚,特意分开了)查看当前目录下,各文件的大小(单个文件或是单个文件夹),输入- -max就可以按tab了。这是个我经常使用的命令,因为公司有个服务器空间总是会被大家占满,此时可以cd /home,然后执行sudo du -h –max_depth=1,这样每个人的账户占用了多大的空间就一目了然了
  • ls -l | grep “^-” | wc -l:(grep和wc前面是或符号|,其余是小写字母l)用于计算当前目录下有多少个文件,注意仅仅统计文件个数,不统计文件夹个数。我感觉这比“右键-文件夹属性”靠谱一些。此外,要统计文件夹个数,可以将”^-“改为”^d”。同理,要想统计jpg文件个数,可以将”^-“改为”.jpg”,等等以此类推
  • ls | head -10 | xargs -I {} cp {} dst:(xargs -后面接的是i的大写字母)将当前目录下的前10个文件拷贝到dst目录下,这个用法有点高级了,是同学教我的,就是利用xargs实现cp、mv时的自定义参数,读者可以更进一步了解它的用法

  • 分个段,继续写

  • ssh yourname@192.168.x.x:登录ubuntu服务器,yourname是你在服务器上的账号名,后面是服务器在局域网里的ip scp (-r) src_file yourname@192.168.x.x:/home/yourname/xxx:将本机src_file拷贝到服务器的xxx路径下,加r是针对文件夹。这个命令同样可以用于从服务器下载文件到本机,前提是你装了open-ssh
  • 关于上面的登录服务器,每次都输一遍太麻烦,此时可以写一个脚本,具体可以搜一下sshpass

  • su username:切换为username用户
  • dos2unix xxx:将windows格式的文本文件转换为linux
  • watch -n 1 nvidia-smi:每1秒刷新显卡的使用情况(输入nvidia-smi只能得到一个固定的结果)
  • whereis xx:查找xx的安装路径,这个好像只能找到系统路径下的软件
  • find path -name “filename”:在path下查找所有文件名为filename的文件,支持模糊查找
  • grep -nHR “xxx”:查找当前目录下,所有出现过xxx字段的文件,并给出在哪一行,这个比较适合看代码用
  • eog xx.jpg:用命令行查看xx.jpg,这样避免了从图形界面访问图片目录

  • 接下来记录一下几个小问题的解决办法

    1、ubuntu下经常会碰到文件管理器死掉的情况
    ps -A | grep nautilus 或者 pidof nautilus
    sudo kill pid

    第一步是获取文件管理器的进程pid,第二步是杀掉进程,然后重启即可。ps的用法还有

    ps -p pidnumber -o comm=    #通过pidnumeber获取它对应的进程名
    2、设置开机自动挂载硬盘
    sudo blkid      #查看每块硬盘的uuid,复制待挂载硬盘的uuid
    sudo vim /etc/fstab   #参考里面其它硬盘的挂载方式,添加自定义的挂载盘
    3、设置开机自启动的脚本
    sudo vim /etc/rc.local  #打开该文件
    sudo 、xx/xx.sh   #写入rc.local,xx.sh是待启动的脚本
    4、设置环境变量
    sudo vim /etc/profile   #这个是系统的环境变量,能对所有用户起作用,尽量少改。修改之后需重启电脑才能生效
    
    vim ~/.bashrc   #当前用户的环境变量,修改之后还需配合执行如下命令
    .(source) ~/.bashrc        #注意这个改了之后,别的已经打开的terminal并不会生效,需要关了再开才会生效
    
    export PATH=xxxxxx:$PATH   #这两种都是临时环境,仅在当前terminal生效,terminal关闭之后就没了
    export LD_LIBRARY_PATH=xxx:$LD_LIBRARY_PATH
    5、自己编写脚本xx.sh
    开头加上#!/bin/sh或者#!/bin/bash,后者是前者的增强版,因为有时候前者会失灵(我也不知道为什么。。)
    写好脚本后,应执行chmod 777 ./xx.sh
    此后即可执行./xx.sh

    最后说一点vim的用法

    关于vim其实我用的不多,开发代码还是要IDE。但是在服务器上查看和修改一些文件时,必须用到vim或者vi(vim是升级版的vi)。话不多说,下放一张图
    这里写图片描述
    上图是我偶然一次在stackoverflow的回答里面看到的,现在找不到原答案了,幸好当时跟着画了一遍。看明白了这张图,对vim的基本读写操作应该就清楚了。下面再介绍一些其它的用法:

  • vim的复制粘贴
  • 把内容复制到vim外:先按“v”,进入可视化,然后选择复制内容,再按“+y“,此时内容仅仅在寄存器内。此时需要输入”:reg“,进入寄存器中,才能将内容复制到vim以外
  • vim的便捷浏览
  • shift+4:光标移动到句尾
    0:(数字0)光标移动到句首
    shift+g:光标移动到文件尾
    gg:光标移动到文件头
  • vim的其它方法
  • :set number/nonumber:显示、消除行数信息
    :%s/foo/bar/g:文本替换,用bar来替换foo

    网上vim相关教程太多了,这里就提一点点我经常用的。

    三、ubuntu下一些软件安装的注意事项

    主要是我自己常用的软件,记录一下。

    1、opencv解决卡在ippicv_xxx.tgz文件下载的问题
    • 手动下载相应版本的.tgz文件
    • 进入opencv/.cache目录,在该目录下有个未下载完成的ippcv文件,将这个文件名复制
    • 将自己手动下载的ippicv_xxx.tgz重命名,替换上面的文件
    2、cuda检查是否正确安装
    • cd /usr/local/cuda/samples/1_Utilities/deviceQuery
    • sudo make
    • ./deviceQuery,出现显卡的相关信息则说明安装成功

    PS

    这排版看得我脑壳疼,后面还会更新的,到时候整个好看点的。
    (2018/08/28)更新了一下,感觉还是不太好看。另外csdn的markdown是支持html语言的。

    展开全文
  • ubuntu的sh文件编程(一)

    万次阅读 2016-11-15 15:07:18
    打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就...” 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用种Shell。echo命令用于向窗口输出文本。

    sh文件是常用的内容,下面内容来自c语言中文网。禁止商业用途,如有侵权,立即删除。

    打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用php写shell 脚本,扩展名就用php好了。


    输入一些代码:
    1. #!/bin/bash
    2. echo "Hello World !"
    “#!” 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell。echo命令用于向窗口输出文本。

    运行Shell脚本有两种方法。

    作为可执行程序

    将上面的代码保存为test.sh,并 cd 到相应目录:
    chmod +x ./test.sh  #使脚本具有执行权限
    ./test.sh  #执行脚本
    注意,一定要写成./test.sh,而不是test.sh。运行其它二进制的程序也一样,直接写test.sh,linux系统会去PATH里寻找有没有叫test.sh的,而只有/bin, /sbin, /usr/bin,/usr/sbin等在PATH里,你的当前目录通常不在PATH里,所以写成test.sh是会找不到命令的,要用./test.sh告诉系统说,就在当前目录找。

    通过这种方式运行bash脚本,第一行一定要写对,好让系统查找到正确的解释器。

    这里的"系统",其实就是shell这个应用程序(想象一下Windows Explorer),但我故意写成系统,是方便理解,既然这个系统就是指shell,那么一个使用/bin/sh作为解释器的脚本是不是可以省去第一行呢?是的。

    作为解释器参数

    这种运行方式是,直接运行解释器,其参数就是shell脚本的文件名,如:
    /bin/sh test.sh
    /bin/php test.php
    这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。

    再看一个例子。下面的脚本使用 read 命令从 stdin 获取输入并赋值给 PERSON 变量,最后在 stdout 上输出:
    1. #!/bin/bash
    2. # Author : mozhiyan
    3. # Copyright (c) http://see.xidian.edu.cn/cpp/linux/
    4. # Script follows here:
    5. echo "What is your name?"
    6. read PERSON
    7. echo "Hello, $PERSON"
    运行脚本:
    chmod +x ./test.sh
    $./test.sh
    What is your name?
    mozhiyan
    Hello, mozhiyan
    $
    


    Shell支持自定义变量。

    定义变量

    定义变量时,变量名不加美元符号($),如:
    1. variableName="value"
    注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:
    • 首个字符必须为字母(a-z,A-Z)。
    • 中间不能有空格,可以使用下划线(_)。
    • 不能使用标点符号。
    • 不能使用bash里的关键字(可用help命令查看保留关键字)。

    变量定义举例:
    1. myUrl="http://see.xidian.edu.cn/cpp/linux/"
    2. myNum=100

    使用变量

    使用一个定义过的变量,只要在变量名前面加美元符号($)即可,如:
    1. your_name="mozhiyan"
    2. echo $your_name
    3. echo ${your_name}
    变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:
    1. for skill in Ada Coffe Action Java
    2. do
    3. echo "I am good at ${skill}Script"
    4. done
    如果不给skill变量加花括号,写成echo "I am good at $skillScript",解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。

    推荐给所有变量加上花括号,这是个好的编程习惯。

    重新定义变量

    已定义的变量,可以被重新定义,如:
    1. myUrl="http://see.xidian.edu.cn/cpp/linux/"
    2. echo ${myUrl}
    3. myUrl="http://see.xidian.edu.cn/cpp/shell/"
    4. echo ${myUrl}
    这样写是合法的,但注意,第二次赋值的时候不能写 $myUrl="http://see.xidian.edu.cn/cpp/shell/",使用变量的时候才加美元符($)。

    只读变量

    使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

    下面的例子尝试更改只读变量,结果报错:
    1. #!/bin/bash
    2. myUrl="http://see.xidian.edu.cn/cpp/shell/"
    3. readonly myUrl
    4. myUrl="http://see.xidian.edu.cn/cpp/danpianji/"
    运行脚本,结果如下:
    /bin/sh: NAME: This variable is read only.

    删除变量

    使用 unset 命令可以删除变量。语法:
    1. unset variable_name
    变量被删除后不能再次使用;unset 命令不能删除只读变量。

    举个例子:
    1. #!/bin/sh
    2. myUrl="http://see.xidian.edu.cn/cpp/u/xitong/"
    3. unset myUrl
    4. echo $myUrl
    上面的脚本没有任何输出。

    变量类型

    运行shell时,会同时存在三种变量:

    1) 局部变量

    局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。

    2) 环境变量

    所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。

    3) shell变量

    shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

    前面已经讲到,变量名只能包含数字、字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量。

    例如,$ 表示当前Shell进程的ID,即pid,看下面的代码:

    1. $echo $$
    运行结果
    29949

    特殊变量列表
    变量 含义
    $0 当前脚本的文件名
    $n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
    $# 传递给脚本或函数的参数个数。
    $* 传递给脚本或函数的所有参数。
    $@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
    $? 上个命令的退出状态,或函数的返回值。
    $$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

    命令行参数

    运行脚本时传递给脚本的参数称为命令行参数。命令行参数用 $n 表示,例如,$1 表示第一个参数,$2 表示第二个参数,依次类推。

    请看下面的脚本:
    1. #!/bin/bash
    2. echo "File Name: $0"
    3. echo "First Parameter : $1"
    4. echo "Second Parameter : $2"
    5. echo "Quoted Values: $@"
    6. echo "Quoted Values: $*"
    7. echo "Total Number of Parameters : $#"
    运行结果:
    $./test.sh Zara Ali
    File Name : ./test.sh
    First Parameter : Zara
    Second Parameter : Ali
    Quoted Values: Zara Ali
    Quoted Values: Zara Ali
    Total Number of Parameters : 2

    $* 和 $@ 的区别

    $* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。

    但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。

    下面的例子可以清楚的看到 $* 和 $@ 的区别:
    1. #!/bin/bash
    2. echo "\$*=" $*
    3. echo "\"\$*\"=" "$*"
    4. echo "\$@=" $@
    5. echo "\"\$@\"=" "$@"
    6. echo "print each param from \$*"
    7. for var in $*
    8. do
    9. echo "$var"
    10. done
    11. echo "print each param from \$@"
    12. for var in $@
    13. do
    14. echo "$var"
    15. done
    16. echo "print each param from \"\$*\""
    17. for var in "$*"
    18. do
    19. echo "$var"
    20. done
    21. echo "print each param from \"\$@\""
    22. for var in "$@"
    23. do
    24. echo "$var"
    25. done
    执行 ./test.sh "a" "b" "c" "d",看到下面的结果:
    $*=  a b c d
    "$*"= a b c d
    $@=  a b c d
    "$@"= a b c d
    print each param from $*
    a
    b
    c
    d
    print each param from $@
    a
    b
    c
    d
    print each param from "$*"
    a b c d
    print each param from "$@"
    a
    b
    c
    d

    退出状态

    $? 可以获取上一个命令的退出状态。所谓退出状态,就是上一个命令执行后的返回结果。

    退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1。

    不过,也有一些命令返回其他值,表示不同类型的错误。

    下面例子中,命令成功执行:
    $./test.sh Zara Ali
    File Name : ./test.sh
    First Parameter : Zara
    Second Parameter : Ali
    Quoted Values: Zara Ali
    Quoted Values: Zara Ali
    Total Number of Parameters : 2
    $echo $?
    0
    $

    $? 也可以表示函数的返回值。

    如果表达式中包含特殊字符,Shell 将会进行替换。例如,在双引号中使用变量就是一种替换,转义字符也是一种替换。

    举个例子:

    1. #!/bin/bash
    2. a=10
    3. echo -e "Value of a is $a \n"
    运行结果:
    Value of a is 10
    这里 -e 表示对转义字符进行替换。如果不使用 -e 选项,将会原样输出:
    Value of a is 10\n

    下面的转义字符都可以用在 echo 中:
    转义字符 含义
    \\ 反斜杠
    \a 警报,响铃
    \b 退格(删除键)
    \f 换页(FF),将当前位置移到下页开头
    \n 换行
    \r 回车
    \t 水平制表符(tab键) 
    \v 垂直制表符
    可以使用 echo 命令的 -E 选项禁止转义,默认也是不转义的;使用 -n 选项可以禁止插入换行符。

    命令替换

    命令替换是指Shell可以先执行命令,将输出结果暂时保存,在适当的地方输出。

    命令替换的语法:
    1. `command`
    注意是反引号,不是单引号,这个键位于 Esc 键下方。

    下面的例子中,将命令执行结果保存在变量中:
    1. #!/bin/bash
    2. DATE=`date`
    3. echo "Date is $DATE"
    4. USERS=`who | wc -l`
    5. echo "Logged in user are $USERS"
    6. UP=`date ; uptime`
    7. echo "Uptime is $UP"
    运行结果:
    Date is Thu Jul  2 03:59:57 MST 2009
    Logged in user are 1
    Uptime is Thu Jul  2 03:59:57 MST 2009
    03:59:57 up 20 days, 14:03,  1 user,  load avg: 0.13, 0.07, 0.15

    变量替换

    变量替换可以根据变量的状态(是否为空、是否定义等)来改变它的值

    可以使用的变量替换形式:
    形式 说明
    ${var} 变量本来的值
    ${var:-word} 如果变量 var 为空或已被删除(unset),那么返回 word,但不改变 var 的值。
    ${var:=word} 如果变量 var 为空或已被删除(unset),那么返回 word,并将 var 的值设置为 word。
    ${var:?message} 如果变量 var 为空或已被删除(unset),那么将消息 message 送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。
    若此替换出现在Shell脚本中,那么脚本将停止运行。
    ${var:+word} 如果变量 var 被定义,那么返回 word,但不改变 var 的值。

    请看下面的例子:
    #!/bin/bash
    
    echo ${var:-"Variable is not set"}
    echo "1 - Value of var is ${var}"
    
    echo ${var:="Variable is not set"}
    echo "2 - Value of var is ${var}"
    
    unset var
    echo ${var:+"This is default value"}
    echo "3 - Value of var is $var"
    
    var="Prefix"
    echo ${var:+"This is default value"}
    echo "4 - Value of var is $var"
    
    echo ${var:?"Print this message"}
    echo "5 - Value of var is ${var}"
    运行结果:
    1. Variable is not set
    2. 1 - Value of var is
    3. Variable is not set
    4. 2 - Value of var is Variable is not set
    5. 3 - Value of var is
    6. This is default value
    7. 4 - Value of var is Prefix
    8. Prefix
    9. 5 - Value of var is Prefix
    Bash 支持很多运算符,包括算数运算符、关系运算符、布尔运算符、字符串运算符和文件测试运算符。

    原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。

    expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

    例如,两个数相加:
    1. #!/bin/bash
    2. val=`expr 2 + 2`
    3. echo "Total value : $val"
    运行脚本输出:
    Total value : 4
    两点注意:
    • 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
    • 完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。

    算术运算符

    先来看一个使用算术运算符的例子:
    1. #!/bin/sh
    2. a=10
    3. b=20
    4. val=`expr $a + $b`
    5. echo "a + b : $val"
    6. val=`expr $a - $b`
    7. echo "a - b : $val"
    8. val=`expr $a \* $b`
    9. echo "a * b : $val"
    10. val=`expr $b / $a`
    11. echo "b / a : $val"
    12. val=`expr $b % $a`
    13. echo "b % a : $val"
    14. if [ $a == $b ]
    15. then
    16. echo "a is equal to b"
    17. fi
    18. if [ $a != $b ]
    19. then
    20. echo "a is not equal to b"
    21. fi
    运行结果:
    a + b : 30
    a - b : -10
    a * b : 200
    b / a : 2
    b % a : 0
    a is not equal to b
    注意:
    • 乘号(*)前边必须加反斜杠(\)才能实现乘法运算;
    • if...then...fi 是条件语句,后续将会讲解。

    算术运算符列表
    运算符 说明 举例
    + 加法 `expr $a + $b` 结果为 30。
    - 减法 `expr $a - $b` 结果为 10。
    * 乘法 `expr $a \* $b` 结果为  200。
    / 除法 `expr $b / $a` 结果为 2。
    % 取余 `expr $b % $a` 结果为 0。
    = 赋值 a=$b 将把变量 b 的值赋给 a。
    == 相等。用于比较两个数字,相同则返回 true。 [ $a == $b ] 返回 false。
    != 不相等。用于比较两个数字,不相同则返回 true。 [ $a != $b ] 返回 true。

    注意:条件表达式要放在方括号之间,并且要有空格,例如 [$a==$b] 是错误的,必须写成 [ $a == $b ]。

    关系运算符

    关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

    先来看一个关系运算符的例子:
    1. #!/bin/sh
    2. a=10
    3. b=20
    4. if [ $a -eq $b ]
    5. then
    6. echo "$a -eq $b : a is equal to b"
    7. else
    8. echo "$a -eq $b: a is not equal to b"
    9. fi
    10. if [ $a -ne $b ]
    11. then
    12. echo "$a -ne $b: a is not equal to b"
    13. else
    14. echo "$a -ne $b : a is equal to b"
    15. fi
    16. if [ $a -gt $b ]
    17. then
    18. echo "$a -gt $b: a is greater than b"
    19. else
    20. echo "$a -gt $b: a is not greater than b"
    21. fi
    22. if [ $a -lt $b ]
    23. then
    24. echo "$a -lt $b: a is less than b"
    25. else
    26. echo "$a -lt $b: a is not less than b"
    27. fi
    28. if [ $a -ge $b ]
    29. then
    30. echo "$a -ge $b: a is greater or equal to b"
    31. else
    32. echo "$a -ge $b: a is not greater or equal to b"
    33. fi
    34. if [ $a -le $b ]
    35. then
    36. echo "$a -le $b: a is less or equal to b"
    37. else
    38. echo "$a -le $b: a is not less or equal to b"
    39. fi
    运行结果:
    10 -eq 20: a is not equal to b
    10 -ne 20: a is not equal to b
    10 -gt 20: a is not greater than b
    10 -lt 20: a is less than b
    10 -ge 20: a is not greater or equal to b
    10 -le 20: a is less or  equal to b

    关系运算符列表
    运算符 说明 举例
    -eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 true。
    -ne 检测两个数是否相等,不相等返回 true。 [ $a -ne $b ] 返回 true。
    -gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ] 返回 false。
    -lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。
    -ge 检测左边的数是否大等于右边的,如果是,则返回 true。 [ $a -ge $b ] 返回 false。
    -le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ] 返回 true。

    布尔运算符

    先来看一个布尔运算符的例子:
    1. #!/bin/sh
    2. a=10
    3. b=20
    4. if [ $a != $b ]
    5. then
    6. echo "$a != $b : a is not equal to b"
    7. else
    8. echo "$a != $b: a is equal to b"
    9. fi
    10. if [ $a -lt 100 -a $b -gt 15 ]
    11. then
    12. echo "$a -lt 100 -a $b -gt 15 : returns true"
    13. else
    14. echo "$a -lt 100 -a $b -gt 15 : returns false"
    15. fi
    16. if [ $a -lt 100 -o $b -gt 100 ]
    17. then
    18. echo "$a -lt 100 -o $b -gt 100 : returns true"
    19. else
    20. echo "$a -lt 100 -o $b -gt 100 : returns false"
    21. fi
    22. if [ $a -lt 5 -o $b -gt 100 ]
    23. then
    24. echo "$a -lt 100 -o $b -gt 100 : returns true"
    25. else
    26. echo "$a -lt 100 -o $b -gt 100 : returns false"
    27. fi
    运行结果:
    10 != 20 : a is not equal to b
    10 -lt 100 -a 20 -gt 15 : returns true
    10 -lt 100 -o 20 -gt 100 : returns true
    10 -lt 5 -o 20 -gt 100 : returns false

    布尔运算符列表
    运算符 说明 举例
    ! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。
    -o 或运算,有一个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
    -a 与运算,两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。

    字符串运算符

    先来看一个例子:
    1. #!/bin/sh
    2. a="abc"
    3. b="efg"
    4. if [ $a = $b ]
    5. then
    6. echo "$a = $b : a is equal to b"
    7. else
    8. echo "$a = $b: a is not equal to b"
    9. fi
    10. if [ $a != $b ]
    11. then
    12. echo "$a != $b : a is not equal to b"
    13. else
    14. echo "$a != $b: a is equal to b"
    15. fi
    16. if [ -z $a ]
    17. then
    18. echo "-z $a : string length is zero"
    19. else
    20. echo "-z $a : string length is not zero"
    21. fi
    22. if [ -n $a ]
    23. then
    24. echo "-n $a : string length is not zero"
    25. else
    26. echo "-n $a : string length is zero"
    27. fi
    28. if [ $a ]
    29. then
    30. echo "$a : string is not empty"
    31. else
    32. echo "$a : string is empty"
    33. fi
    运行结果:
    abc = efg: a is not equal to b
    abc != efg : a is not equal to b
    -z abc : string length is not zero
    -n abc : string length is not zero
    abc : string is not empty

    字符串运算符列表
    运算符 说明 举例
    = 检测两个字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
    != 检测两个字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true。
    -z 检测字符串长度是否为0,为0返回 true。 [ -z $a ] 返回 false。
    -n 检测字符串长度是否为0,不为0返回 true。 [ -z $a ] 返回 true。
    str 检测字符串是否为空,不为空返回 true。 [ $a ] 返回 true。

    文件测试运算符

    文件测试运算符用于检测 Unix 文件的各种属性。

    例如,变量 file 表示文件“/var/www/tutorialspoint/unix/test.sh”,它的大小为100字节,具有 rwx 权限。下面的代码,将检测该文件的各种属性:
    1. #!/bin/sh
    2. file="/var/www/tutorialspoint/unix/test.sh"
    3. if [ -r $file ]
    4. then
    5. echo "File has read access"
    6. else
    7. echo "File does not have read access"
    8. fi
    9. if [ -w $file ]
    10. then
    11. echo "File has write permission"
    12. else
    13. echo "File does not have write permission"
    14. fi
    15. if [ -x $file ]
    16. then
    17. echo "File has execute permission"
    18. else
    19. echo "File does not have execute permission"
    20. fi
    21. if [ -f $file ]
    22. then
    23. echo "File is an ordinary file"
    24. else
    25. echo "This is sepcial file"
    26. fi
    27. if [ -d $file ]
    28. then
    29. echo "File is a directory"
    30. else
    31. echo "This is not a directory"
    32. fi
    33. if [ -s $file ]
    34. then
    35. echo "File size is zero"
    36. else
    37. echo "File size is not zero"
    38. fi
    39. if [ -e $file ]
    40. then
    41. echo "File exists"
    42. else
    43. echo "File does not exist"
    44. fi
    运行结果:
    File has read access
    File has write permission
    File has execute permission
    File is an ordinary file
    This is not a directory
    File size is zero
    File exists

    文件测试运算符列表
    操作符 说明 举例
    -b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
    -c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
    -d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。
    -f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。
    -g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。
    -k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。
    -p file 检测文件是否是具名管道,如果是,则返回 true。 [ -p $file ] 返回 false。
    -u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。
    -r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。
    -w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。
    -x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。
    -s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。
    -e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。

    展开全文
  • ubuntu shell简介

    2012-10-17 17:17:21
    ubuntu shell简介(2012-03-13 19:48:09) ...虚拟机下的ubuntu8.04 ...1.什么是shell?...shell是接受用户或应用层的命令,并将这些命令解释给底层的系统内核层,由...我们经常使用的终端就是一虚拟shell,或者称为
  • 查看当前发行版可以使用shell yeguangrong@yeguangrong-Inspiron-3847:~$ cat /etc/shells 输出如下 # /etc/shells: valid login shells /bin/sh /bin/dash /bin/bash /bin/rbash 查看当前使用的...
  • Ubuntu切换默认sh为bash或者dash

    万次阅读 2016-08-06 15:07:25
    1 bash与dash从Ubuntu 6.10开始,默认使用dash(theDebian Almquist Shell)而不是bash(the GNUBourne-Again Shell).但Login Shell还是bash. 原因是dash更快、更高效,而且它符合POSIX规范。Ubuntu在启动的时候会运行...
  • Ubuntu18.04安装gnome shell extensions

    万次阅读 2018-09-22 15:28:51
    什么是gnome shell extensions? 步骤 1: 安装 浏览器附加组件 步骤 2: 安装本地连接器 步骤 3: 在 Web 浏览器中安装 GNOME Shell 扩展 步骤4:使用GNOME Tweaks Tool 中配置通过 Web 浏览器安装的扩展 ...
  • ubuntu中写一个shell脚本的过程

    千次阅读 2014-10-28 11:05:08
    gedit hello.sh ,然后输入 #!/bin/bash echo "Hello world!" chmod +x hello.sh ./hello.sh
  • ubuntu gnome shell 主题安装

    万次阅读 2012-11-07 12:59:42
    再一次把系统切到ubuntu 版本号是 12.04 安装了gnome shell后对默认的主题不怎么满意,不喜欢带圆角的gnome shell主题,果断换 安装了gnome tweak tools之后,发现shell theme不可选,显示一个黄色的三角图标。 ...
  • 用linux shell逐行读取文本文件内容

    万次阅读 2017-12-05 20:03:05
    遇到了, 记录一下, 比写代码...ubuntu@VM-0-13-ubuntu:~$ cat a.txt gaga agagag agaga agagd xxx agadaa agaoo yyy zzzz ubuntu@VM-0-13-ubuntu:~$ ubuntu@VM-0-13-ubuntu:~$ ubuntu@VM-0-13-ubuntu:~$ cat a.s
  • 平时写的Shell都是bash,在Ubuntu上写Shell有些不习惯。因为buntu6.10已将先前默认的bashshell更换为了dash。其表现是/bin/sh链接到了/bin/dash而不是传统的/bin/bash。 $ cd /bin $ ll sh -> dash* 在...
  • 使用以下命令在shell终端中以窗口形式打开一个文件夹 nautilus dirname 可以用 alias 命令来给nautilus命令重新起名字,容易记住 alias opendir='nautilus' 完成之后就可以用 opendir 命令来进行与 nautilus ...
  • ubuntu上第一个shell脚本

    万次阅读 2017-05-27 10:20:08
    参考:https://billie66.github.io/TLCL/book/zh/chap25.htmlUbuntu下第一个shell脚本在home目录下新建文件夹xkmkdir xk进入xk文件夹,新建文件helloshelltouch helloshell在helloshell文件中输入如下内容:#!...
  • Ubuntu14.04 安装GNOME Shell(设置个性桌面)第一步:安装GNOME Shellsudo apt-get install gnome-shell第二步:退出当前账户,选择GNOME桌面系统方法可参考下面网址: http://www.tuicool.com/articles/UJ7fuiI第...
  • 看的是鸟哥的私房菜,里面有讲到执行shell脚本有两方法: 1. 设置执行属性: chmod 755 file 执行(如果已经在当前目录) : ./file 2. 使用: sh file 执行 .但是在vmware里装的ubuntu 11.10却无法执行 #!/bin/...
  • ubuntu改默认sh为bash

    千次阅读 2018-06-03 14:23:30
    ubuntu默认sh为dash,有很多命令不能用,我就把默认sh改成了bash,方便使用使用命令sudo dpkg-reconfigure dash然后弹出选择框,选择no,就可以把默认shell改成bash...
  • 自己安装ubuntu的时候出现了 如题的情况,网上搜了很多,不少人有类似的情况, 但是出现的原因和解决的方法都说的不清楚 下面这个是在 http://www.ubuntu-tw.org/modules/newbb/viewtopic.php?topic_id=37010 ...
  • shell脚本----for循环

    万次阅读 2013-06-30 13:14:23
    1.方法1 #!/bin/bash for((i=1;i;i++)) do echo $i done 保存为for1.sh 直接sh for1.sh ...代码对于标准bash而言没有错,因为Ubuntu为了加快开机速度,用dash代替了传统的bash,是dash在捣鬼
  • Ubuntu编写shell脚本

    千次阅读 2015-11-16 21:34:02
    先介绍几个常用命令 $()在bash中叫做 命令替换,回调用一个subshell。通俗点讲,就是被它括起来的命令部分将优先执行。 echo(显示文字) echo $A 表示输出变量A的值 echo [-ne][字符串]或 echo [--help][--...
1 2 3 4 5 ... 20
收藏数 109,869
精华内容 43,947
关键字:

ubuntu 使用哪种shell