Linux Shell笔记 (一)

1、变量和运算  (注:从上往下一步一步执行)
   1.本地变量在用户现在的shell生命期的脚本中使用
   variable-name=value 例如:test="test"
 
   2.set显示本地所有的变量

   3.设成只读变量:readonly variable-name 例如:test="cynric" 会出错
     readonly命令可以查看所有的只读变量

   4.变量替换
    ${Variable name}        显示实际值到variable name
    ${Variable name:+value}        如果设置了variable name,则显示value,否则为空
        例如:echo ${test:+"abcd"}   显示abcd
          echo ${cywosp:+"abcd"} 显示为空
    ${Variable name:?value}        如果未设置variable name,显示用户定义的错误信息value
        例如:echo ${cywosp:?"no defined"} 显示no defined
          echo ${test:?"no defined"}   显示test
    ${Variable name:-value}        如果未设置variable name,则显示其值value
        例如:echo ${cywosp:-"no defined"} 显示no defined
          echo ${test:-"no defined"}   显示test
    ${Variable name:=value}        如果未设置Varible name,则将其值赋为value并显示
        例如:echo ${cywosp:="cywosp"}     显示cywosp
          echo ${test:="test"}           显示test
   5、变量的清除
    unset variable-name 例如:unset cywosp
    注:readonly的变量不能unset,所以readonly要谨慎使用

   6、位置变量 (一般不超过10个)
    位置变量表示$0,$1 ......$9
    $0 表示脚本名 $1 ......$9是输入的参数值

    例如1:
    #!/bin/bash
    #cynric

    echo "第一个参数是:$0"
    echo "第二个参数是:$1"
    echo "第三个参数是:$2"
    echo "第四个参数是:$3"
    echo "第五个参数是:$4"
    echo "第六个参数是:$5"
    echo "第七个参数是:$6"
    echo "第八个参数是:$7"
    echo "第九个参数是:$8"
    echo "第十个参数是:$9"

    ./cynric.sh A B C D E F
    输出:
    第一个参数是:./cynric.sh
    第二个参数是:A
    第三个参数是:B
    第四个参数是:C
    第五个参数是:D
    第六个参数是:E
    第七个参数是:F
    第八个参数是:
    第九个参数是:
    第十个参数是:
   
    例如2:
    #!/bin/bash
    #find
   
    #在根目录下查询传入的文件
    find / -name $1 -print

    7、特殊变量
    $# 传递到脚本的参数个数
    $* 以一个但字符串显示所有向脚本传递的参数。与位置变量不同,此项参数可超过9个
    $$ 脚本运行的当前进程号
    $! 后台运行的最后一个进程的进程ID号
    $@ 传递到脚本的参数列表,使用时加引号,并在引号中返回每个参数
    $- 显示shell使用的当前选项,与set命令功能相同
    $? 显示最后命令的退出状态。0表示没有错误,其他任何值表示有错误。

    例如:
    #!/bin/bash
    #cynric1

    echo "第一个参数是:$0"
    echo "第二个参数是:$1"
    echo "第三个参数是:$2"
    echo "第四个参数是:$3"
    echo "第五个参数是:$4"
    echo "第六个参数是:$5"
    echo "第七个参数是:$6"
    echo "第八个参数是:$7"
    echo "第九个参数是:$8"
    echo "第十个参数是:$9"
    echo "显示参数个数: $#"
    echo "显示脚本全部参数: $*"
    echo "显示进程ID  : $$"
    echo "显示前一命令运行后状态: $?"
    结果:
    ./cynric1.sh cynric 1 2 3   
    第一个参数是:./cynric1.sh
    第二个参数是:cynric
    第三个参数是:1
    第四个参数是:2
    第五个参数是:3
    第六个参数是:
    第七个参数是:
    第八个参数是:
    第九个参数是:
    第十个参数是:
    显示参数个数: 4
    显示脚本全部参数: cynric 1 2 3
    显示进程ID  : 13002
    显示前一命令运行后状态: 0

    8、运算符类型
    2 55:00

    9、表达式替换
    $[ ]和$( () ) 习惯使用$[ ],所有shell的求值都是用整数完成
    $[ ]可以接受不同基数的数字
        [ base#n ] n表示基数从2到36的任何基数。
        例如:echo $[ 10#8 + 1 ] 结果为 9
          echo $((10#8 + 1)) 结果为 9

2、输入输出
    1、echo命令可以显示文本行或变量,或者把字符串输入到文件
       echo [option] string
    -e解析转义字符
    -n回车不换行,Linux系统默认回车换行
    -转义字符(/c, /f, /t, /n)
    例如:echo -e "asdfsdfs/n/n/n";  输出asdfsdfs并输出3个空行
   
  
    2、read语句可以从键盘或文件的某一行文本中读入信息,并将其赋给一个变量。
    read variable1 variable2...
    如果只指定了一个变量,那么read将会把所有的输入赋给该变遇到第一个文件量,
    直至遇到第一个文件结束符或回车;如果给出了多个变量,它们按顺序分别被赋
    予不同的变量。shell将用空格作为变量之间的分隔符。
    例如:
    #!/bin/bash
    #readname
    echo -n "First Name:"
    read firename;
    echo -n "Last Name:"
    read lastname subname
    echo -e "Your First Name is: $(firstname)/n"
    echo -e "Your Last Name is: $(lastname)/n"
    echo -e "Your subname is: ${subname}/n"

    结果:
    First Name:cyn
    Last Name:ric aaa
    Your First Name is: cyn

    Your Last Name is: ric

    Your subname is: aaa

    3、管道运算符
    1、ls -l | grep "文件名" //列出特定文件的信息
        ls -l | grep "readname.sh"
        结果:
        -rwxrwxrwx 1 root root 182 01-24 23:10 readname.sh

    2、df -k | awk '{print $1}' | grep -v "文件系统"

    df -k结果:    //查看磁盘情况
    文件系统               1K-块        已用     可用 已用% 挂载点
    /dev/sda1             28439328   3802412  23168980  15% /
    tmpfs                   200776         0    200776   0% /dev/shm
    .host:/               31455236  21498088   9957148  69% /mnt/hgfs

    df -k | awk '{print $1}'结果: //输出第一列
    文件系统
    /dev/sda1
    tmpfs
    .host:/

    df -k | awk '{print $1}' | grep -v "文件系统" 结果:
    /dev/sda1
    tmpfs
    .host:/

    3、tee命令把输出的一个副本输送到标准输出,另一副本拷贝到相应的文件中
       tee -a files //-a是追加到文件之后
        如果希望在看到输出的同时,也将其存入一个文件,那么这个命令再适合不过了
        一般用于管道之后。
    4、重定向
    cat >> text << China
    > hello
    > my name is cywosp
    > China //输入China结束

    cat text结果为:
    hello
    my name is cywosp

    cat account_new.txt account_old.txt 1>account.out 2>account.err
    把account_new.txt和account_old.txt中的内容输入到account.out中,如果
    前面两个文件有某个不存在则把错误输入到account.err中
    结果:
    [root@localhost ShellStudy]# ls
    account.err  cynric1.sh  find.sh      text      who2.out
    account.out  cynric.sh   readname.sh  who1.out  who.out
    [root@localhost ShellStudy]# cat account.out
    [root@localhost ShellStudy]# cat account.err
    cat: account_new.txt: 没有那个文件或目录
    cat: account_old.txt: 没有那个文件或目录

    5、grep "standard" standard.txt //在standard.txt中查找standard

    6、exec命令
     1 #!/bin/bash
     2 # 使用'exec'重定向stdin.
     3
     4
     5 exec 6<&0          # 将文件描述符#6与stdin链接起来.
     6                    # 保存stdin.
     7
     8 exec < data-file   # stdin被文件"data-file"所代替.
     9
     10 read a1            # 读取文件"data-file"的第一行.
     11 read a2            # 读取文件"data-file"的第二行.
     12
     13 echo
     14 echo "Following lines read from file."
     15 echo "-------------------------------"
     16 echo $a1
     17 echo $a2
     18
     19 echo; echo; echo
     20
     21 exec 0<&6 6<&-
     22 #  现在将stdin从fd #6中恢复, 因为刚才我们把stdin重定向到#6了,
     23 #+ 然后关闭fd #6 ( 6<&- ), 好让这个描述符继续被其他进程所使用.
     24 #
     25 # <&6 6<&-    这么做也可以.
     26
     27 echo -n "Enter data  "
     28 read b1  # 现在"read"已经恢复正常了, 就是能够正常的从stdin中读取.
     29 echo "Input read from stdin."
     30 echo "----------------------"
     31 echo "b1 = $b1"
     32
     33 echo
     34
     35 exit 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值