Linux——Bash及shell脚本学习

导读:本篇文章讲解 Linux——Bash及shell脚本学习,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

在linux中,shell主要分为b_shell 和c_shell。Bash即是b_shell的一种(全称Bourne Again Shell)

1. Bash及shell基本知识

  • shell含义
    shell可以将输入的命令和内核沟通,以便让内核控制硬件工作。
  • bash环境配置文件
    系统存在一些环境配置文件,Bash在启动时会直接读取这些文件。
    这些文件分为全局系统配置文件和用户个人偏好配置文件
  1. /etc/profile:全局系统配置文件。该文件可利用用户标识符来决定很多重要的变量数据,最好不要修改
  2. ~/.bash_profile:个人偏好配置文件。调用.bashrc文件;在PATH变量后面加入了“:$HOME/bin”这个目录
  • login和non-login shell
    两种登录方式取得bash的情况中,都会自动读取配置文件,但是二者读取的文件并不一样。一般来说,login shell只会读取 /etc/profile 和 ~/.bash_profile或~/.bash_login或~/.profile(三个文件按读取优先级排列)两个配置文件;non-login shell只会读取~/.bashrc

2. 常用语句

  • 变量
    通常大写字符为系统默认变量,自行设置变量可以用小写
    子进程会继承父进程的环境变量,但不会继承其自定义变量。
echo  $username                            //查看变量
username=/var/spool/mail/user    //设置变量:等号两边不能有空格
var="where is $username"           //双引号内的特殊字符可以保留原特性,echo结果:where is /var/spool/mail/user
                                                     //单引号内的仅是纯文本
export  username                   //父进程的自定义变量是无法在子进程中使用,可通过export将变量变成环境变量    
env                                         //查看环境变量,等同于export;set可查看所有变量(环境变量+自定义变量)
unset:username                            //取消变量
  • $0、$1、$2
echo "shell脚本本身的名字: $0"
echo "传给shell的第一个参数: $1"
echo "传给shell的第二个参数: $2"
  • 命令别名
    类似于宏定义
alias  cls=‘clear’
  • Create a file and write info to it
set SRC     "I have an English name."
set file_wr_id    [open data.txt w+]      
puts   $file_wr_id    $SRC                #将变量写进文件
flush  $file_wr_id                        #刷新
close  $file_wr_id                        #与flush成对使用
  • #Read sth from a file
set DST ""
set file_rd_id    [open data.txt r]
set $file_rd_id   DST
echo "Read from the file: {$DST}"

close $file_rd_id
  • 子程序
proc max {a, b} {
    if {$a > $b} {
        set y   $a;
    }else{
        set y   $b;
    }
    return     $y;
}
  • 循环语句
while {$i < 10}{
    echo "Current value of i is $i";
    incr i 1                                #自增1    
}

for{set idx 0} {$idx < 10}{incr idx 1} {
    if{$idx == 8} {
        continue;                           #当idx等于8时,下面的语句直接跳过不运行
    }
    echo "Current value of idx is $idx";
}

foreach NAME $NAMES{
    echo "$NAME is here!"
}
  • 条件语句

-e filename 如果 filename存在,则为真
-d filename 如果 filename为目录,则为真 
-f filename 如果 filename为常规文件,则为真
-L filename 如果 filename为符号链接,则为真
-r filename 如果 filename可读,则为真 
-w filename 如果 filename可写,则为真 
-x filename 如果 filename可执行,则为真
-s filename 如果文件长度不为0,则为真
-h filename 如果文件是软链接,则为真
filename1 -nt filename2 如果 filename1比 filename2新,则为真。
filename1 -ot filename2 如果 filename1比 filename2旧,则为真。

if{var == 1}{
}elseif{var == 2}{
}else{
}

switch -regexp -exact $NAME {
    "kevin" {
        echo "It's my name.";
    }
    "lisa"  {
        echo "It is not my name.";
    }
    default {
        echo "It's a secret."
    }
}

3. 正则表达式

1 字符串操作

  • awk

NF表示分割后的字段个数。

  1. 以下划线分割字符串,并打印第一个字段的首字母
    ls |awk -F ‘[_]’ ‘{print substr($1, 0,1)}’
  2. 以下划线分割字符串,并依次打印每个字段的首字母
    ls |awk -F ‘[_]’ ‘{for(i=1; i<=NF; i++) printf substr($i, 0,1)}’

4. 一些error和warning

  1. /bin/sh: 1: source: not found

该问题常出现在ubuntu环境中,解决参考:http://blog.chinaunix.net/uid-28458801-id-4537781.html

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/82527.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!