linux shell学习笔记1

来源:互联网 发布:广电机顶盒安装软件 编辑:程序博客网 时间:2024/05/22 15:17

文件名为test。输入的命令为./test one two three four

 

1、$1:代表命令的第一个参数(one)。以此类推,$2为第二个参数(two), $3为第三个参数(three)

 

2、$#:代表命令的参数个数,以上为4;

 

3、$*:代表所有参数。echo $*则控制台输出one two three four;

 

4、select:提供与用户交互的功能。举例如下:

          echo "what is your favourite OS?"

          select var in "linux" "unix" "windows"; do

                break;

          done;

          echo "you have selected is $var";

    以上语句执行后的效果如下:

           what is you favourite OS?
           1) linux
           2) unix
           3) windows
           #?

     当输入1后,则打印:you have selected linux;

5、定义变量:a=13;切记等号左右不能有空格。在输出时,如果写$a,则会显示3,如果写$ab,则会显示b,因为并没有为ab赋值。如果想打印出13b,则应如下写:${a}b。

 

6、if命令。格式为:

        if ....; then           ....        elif ....; then            ....        else            ....        fi

    大多数情况下,可以使用测试命令来对条件进行测试,比如可以比较字符串、判断文件是否存在及是否可读等等……通常用" [ ] "来表示 条件测试,注意这里的空格很重要,要确保方括号前后有空格

    [ -f "somefile" ] :判断是否是一个文件
    [ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
    [ -n "$var" ] :判断$var变量是否有值
    [ "$a" = "$b" ] :判断$a和$b是否相等

7、&&:这里的 && 就是一个快捷操作符,如果左边的表达式为真则执行右边的语句。[ -x "/bin/ls" ] && echo ls;以上语句如果前面命令为真,则执行ls命令。否则什么都不做。

8、while循环。格式如下:
      while .....; do
            .....
      done
    只要测试表达式条件为真,则while循环将一直运行。关键字"break"用来跳出循环,而关键字”continue”则可以跳过一个循环的余下部分,直接跳到下一次循环中。

9、for循环。格式如下:
     for var in .....; do
         .....
     done
    for循环会查看一个字符串行表(字符串用空格分隔),并将其赋给一个变量。以下命令会将A B C分别打印到控制台:
    for var in A B C; do
        echo $var;
    done;

9、在向程序传递任何参数之前,程序会扩展通配符和变量。这里所谓的扩展是指程序会把通配符(比如*)替换成适当的文件名,把变量替换成变量值。我们可以使用引号来防止这种扩展,先来看一个例子,假设在当前目录下有两个jpg文件:mail.jpg和tux.jpg
    以下命令:echo *.jpg,则会在控制台打印出mail.jpg和tux.jpg。
    如果只是想输入"*.jpg",则可以按如下写:'*.jpg',"*.jpg",/*.jpg

10、当要将几行文字传递给一个命令时,用heredocuments是一种不错的方法。对每个脚本写一段帮助性的文字是很有用的,此时如果使用heredocuments就不必用echo函数一行行输出。Here document以 <<开头,后面接上一个字符串,这个字符串还必须出现在heredocument的末尾。下面是一个例子,在该例子中,我们对多个文件进行重命名,并且使用here documents打印帮助:
     help(){
        cat << HELP
            this is a help topic
      HELP
        exit 0
      }
      [ $1 = "-h" ] && help
   以上命令说明:如果用户执行脚本时添加了-h参数,则运行help函数。在则help中,则会打印出this is a help topic字符串。
   以上的<< HELP为here document。在结尾也要添加一个HELP来结束。记住:结束的HELP一定不能加空格。

11、case命令:case表达式可以用来匹配一个给定的字符串,而不是数字(可别和C语言里的switch...case混淆)
    case ... in
         ...) do something here ;;
    esac
   以下举例:
       while [ -n "$1" ]; do
case $1 in
-h) help;shift 1;; # function help is called
-f) opt_f=1;shift 1;; # variable opt_f is set
-l) opt_l=$2;shift 2;; # -l takes an argument -> shift by 2
--) shift;break;; # end of options
-*) echo "error: no such option $1. -h for help";exit 1;;
*) break;;
esac
其中:shift为删除命令参数。
done

12、测试命令
(1)数值测试

  -eq 等于则为真。

  -ne 不等于则为真。

  -gt 大于则为真。

  -ge 大于等于则为真。

  -lt 小于则为真。

  -le 小于等于则为真。

 

  (2)字串测试:

  = 等于则为真。

  != 不相等则为真。

  -z字串 字串长度伪则为真。

  -n字串 字串长度不伪则为真。

 

  (3)文件测试:

  -e文件名 如果文件存在则为真。

  -r文件名 如果文件存在且可读则为真。

  -w文件名 如果文件存在且可写则为真。

  -x文件名 如果文件存在且可执行则为真。

  -s文件名 如果文件存在且至少有一个字符则为真。

  -d文件名 如果文件存在且为目录则为真。

  -f文件名 如果文件存在且为普通文件则为真。

  -c文件名 如果文件存在且为字符型特殊文件则为真。

  -b文件名 如果文件存在且为块特殊文件则为真。

原创粉丝点击