初步探索Linux(2)

初步探索Linux(2)

一、Shell

    1.bash的切换

    bash是linux默认的shell,sh是unix默认的.使用/bin/bash临时切换,永久切换chsh,另外使用chsh -l 是查看.

    2.bash的特点

(1)交互式

(2)命令的历史功能

    (3)命令的补齐功能   tab有一次和两次之分

    (4)通配符 * 任意字符

                ?匹配一个字符         .

                [n-m] 

     (5) 前后台切换   ps -aux 查看进程   wc -l 查看结果的数目

     将前台运行的任务暂停 ctrl +z 查看后台的任务 jobs之后 ,bg 1(号码)这样就可以后台  fg 表示前台

     (6).特殊字符   ""强引用``(位于esc) 命令的取代 '' 表示弱引用 ,

     (7).输入输出的重定向 

        0 标准的输入  1 标准的输出

        2 标准的出错  & 所有的输出

        例如:find / -size +10M 2>(2>出错的重定向) f1

(8).命令的别名 自己做一个别名 alias  

      alias find10 ='/bin/.....' 使用 unalias 可以取消

        想要永久生效的话就需要修改文件/etc/baskrc 将其添加进去就可以了. 

二、环境变量

可以使用set来查看变量。

1.变量的分类

   (1)本地变量

    A(字母数字,特殊字符)这是针对当前的shell生效.

   (2)环境变量

    export 这样就可以将本地变量输入,就可以成为环境变量.export A就可以了

   (3).特殊变量

    a位置变量

例如写一个文件 

#!/bin/bash

    echo $1 $2 $3 $0(该脚本的名称)  之后就可以使用 bash 1.sh 输入a b c 

    b状态变量

    例如echo $?这样可以查看上一个命令是否执行成功0表示成功

   2.环境文件

   (1)系统文件   针对所有用户生效  /etc/profile(变量如hostname) /etc/bashrc (alias等)

   (2)个人 

       ~ /.bash_profile     ~/bashrc

三、运算

   1.算术运算

   (1)let  例如let a=`1+2` ;echo $a 

   (2)$[]  例如a=$[1+2] ;echo $a

   (3)$(()) 例如a=$((1+3)) echo $a

   (4)bc  例如echo "scale=3;4/7" |bc,其中6/7想要实现精度 ,加上 scale=2才可以

    2.判断式

   (1)数字比较

      大于 -gt  大于等于 -ge   小于  -lt   小于等于 -le     等于 -eq 

      不等于 ! -eq (如[ ! 5 -eq 2 ])

   (2)字符串比较

      大于 >   小于 <  等于 = (等号两侧有空格)恒等于 == (类型)

    例如,a=hello; b=hello1; [ $a \> $b ]这样就可以进行比较字符串了,但是不要忘记转义符.另外如果使用两对[]就不用添加转义符.如[[ !$a < $b ]]

   (3)对象

     -f 文件 [ -f f1 ]  -e 存在 [ -e f1 ] -d 目录  

     -L 链接  -r 读取  -x 执行

   (4)其它

    对于判断也可以使用联合的方法.

    -a 与 (两个判断式)如 [ -e f1 -a -f f1 ]

    -o 或

   另外,也可以使用,短路操作符 &&(两个语句)||

   例如,[ -e f1 -a -f f1 ]

       grep "^user1\>" /etc/passwd &>/abx/f122 && echo "the account is exists!" 

四、正则表达式

    元字符

    ^  行首  $行尾   词首 \<  词尾 \>  . 任意的一个字符 

    *  匹配任意次  0--n    \{n,m\}    \{n,\}    \{,m\}

    如grep --color=auto "r\{n,m\}o" f11 | less

      grep --color=auto "[1-9]"f11 | less

   帐号管理例子编写

   #/bin/bash

   read -p "please input one account"(read表示输出)

   grep "^ $ACCOUNT\>" /etc/passwd &> /ba/f1111 && echo "the $ACCOUNT is 

   exists!" || echo "ok!"

   可以使用echo -e 扩展 echo -e "\t\033[31m123\033[0m"(其中123是想要输出 颜色的)echo "123"

五、程序语句

    1.控制语句

    判断语句可以分为

    a单选 if [ 条件 ];then...else ..... fi

      if [ 条件 ];then .... fi

    b多选 if [ 条件 ];then ... Elif[ 条件 ];then ...elif [];then ... Fi

    例子: (主要让用户输入文件和其根目录,判断文件的属性)

    #!/bin/bash

    read -p "please input the file you want" FILE

    read -p "please input the dir you want" DIR

    if [-e $DIR/$FILE ];then

    if [-f $DIR/$FILE ];then

    echo "the $DIR/$FILE is a file "

    elif [-d $DIR/$FILE ]";then

    echo "the $DIR/$FILE is a dir "

    elif [-L $DIR/$FILE ]";then

    echo "the $DIR/$FILE is a Link "

    fi

    else 

    echo "the $DIR/$FILE is not exists!"

    fi

   (如果出错可以添加调试开关 set -x)

    c  case语句(相当于高级语言中的switch语句)

    case 变量 in

    变量值1)

    .....;;

    变量值2)

    ....;;

    变量值3)

    ....;;

    *)

    ...;;

    exac

    例子:(主要让用户输入文件名和路径,进行判断其类型)

   (补充:STRING= - ABC  

echo ${STRING:0:1}(0表示起始列,1表示取1列))

    #!/bin/bash

    read -p "Please input one file" FILE

    read -p "Please input one dir" DIR

    if [ -e $DIR/$FILE ];then

    STRING=`/bin/ls -l -d $DIR/$FILE`

    FIRSTCHAR=`echo "${STRING:0:1}`

    case $FIRSTCHAR in

    -)

    echo "The $DIR/$FILE is a file";;

    d)

    echo "The $DIR/$FILE is a dir;;

    l)

    echo "The $DIR/$FILE is a link";

    b)

    echo "The $DIR/$FILE is a boot device";

    f)

    echo "The $DIR/$FILE is a floppy";

    c)

    echo "The $DIR/$FILE is a char device";

    *)

    exit

    echo "Sorry!There is a problem in this system!"

    else

    echo"Sorry!the $DIR/$FILE is not exist!"

    esac 

    2.循环语句

   (1).for循环

    for 变量 in 变量的值 ;do

    .......

    done

    例如

    #!/bin/bash

    I=1

    SUM=0

    for I in {1..100};do

    let SUM=$SUM+$I

    done

    echo $SUM

   (2).While循环

   while 【条件】;do

    ....

    done

   (3).while read LINE循环

    while read LINE;do

     ......

     done <文件名

   例子:(将所有帐号读取,并进行排序)

   #!/bin/bash

   let I=1

   while read LINE;do

   echo - e "$I:\t"$LINE

   let I=$I+1

   done </etc/passwd

   3.其它语句

   until语句

   until [条件];

   do

   .....

   done 

   只不过条件是不满足,就执行,一旦条件满足就不执行.

你可能感兴趣的:(linux,操作系统,职场,基础知识,休闲)