Shell 编程基础 --语法快速入门

简单的说shell就是一个包含若干行Shell或者Linux命令的文件。对于一次编写,多次使用的大量命令,就可以使用单独的文件保存下来,以便日后使用。通常shell脚本以.sh为后缀,第一行一定要指明系统需要哪种shell解释用户的shell程序,如:#!/bin/bash 、#!/bin/sh等。在这里我们使用#!/bin/bash。

通常shell由Linux命令(外部命令)、Shell(内部命令),控制语句和注释语句等组成,类似与windows下的批处理文件(.bat)。还需要注意的是我们需要使用 chmod  +x name.sh执行shell脚本。

(一)变量和数组

1. 用type判断是否是内部命令: type cmd

2. 变量赋空值的话,直接后面+回车,并且等号两边不能够有空格。

3. echo $a  输出a的值

4. export A,将A设成全局变量

显示变量的值:echo $A ,{}是用来防止混淆的,例如输出A的值后加上B字符:echo${A}B

5. 删除变量:unset A

6. 显示所有变量(包括本地):set ; set | grep A(显示A变量); env 显示全局变量(环境变量);初始化全局变量:export A=200。另外全局变量,按照惯例需要大写:export  LANG

注意:全局变量可被所有的shell环境下访问;如果父Shell进程产生了子Shell进程,则环境变量可被继承并复制

7. 只读变量,指不能被清除或重新赋值的变量: readonly myvar

8. 位置参量(命令行参数):位置参量是一组特殊的内置变量,通常被shell脚本用来从命令行接受参数,或者被函数用来保存传递给他的参数。相当于C语言中的argv, 其中$1表示第一个参数,$2第二个....$9 以后要用花括号把数字括起来,${10};$0 代表当前脚本的文件名。


测试程序:

  1. #!/bin/bash  
  2. #测试位置参数和其他特殊参数  
  3. #使用方法:/target.sh 参数1  参数2  
  4.   
  5. IFS=#  
  6. echo shell script name is : $0  
  7. echo the count of parameters: $#  
  8. echo first param=$1  
  9. echo second param=$2  
  10. echo '$*='$*      #显示所有的位置参数串  
  11. echo '"$*"="$*"'  
  12. echo '$@='$@  
  13. echo '"$@"='"$@"  
  14. echo '
    =
          #显示当前进程号  
  15. echo $!  

数组定义和初始化:arr=(math Chinese English)

数组引用:1. 引用变量:${arr[0]}  2.数组个数:${#arr[*]}  3.所有元素:${arr[*]}

数组赋值:arr[0]=chemial

需要注意的是shell的数组可以不连续的,这也是区别于其他语言的地方,例如:arr[0], arr[1],arr[2],arr[5]是允许的,他们的输出(如果之前赋值和下标相同的话),数组输出是0 1 2 5 ,个数是4。

(二)输入和输出


-p 代表提示符; -t代表超时时间 ; echo $REPLY;echo -n 表示不会输出回车;-e “\t”代表转义选项

echo颜色输出和光标定位

\33表示转义开始,格式为 [数字m,从光标开始时改变颜色

  1. \33[30m -- \33[37m 设置前景色  
  2. \33[40m -- \33[47m 设置背景色  
  3. \33[y;xH  设置光标位置  
  4.   
  5. 示例:  
  6. echo -e "\33[31mthis is a test"  
  7. echo -e "\33[10;5H\33[31;46mthis is a test"  
  8. echo -e "\33[0m"  

(三)字符和测试语句


算术的扩展,注意:符号两端一定要留有空格!


表达式测试:


字符串测试:



检查空值

[ “$name” = “”]

[ ! “$name” ]

[ “X${name}” = “X” ]

注意:字符串测试的两边要有空格


也可以使用(( )),但是两者是不一样的,[]只能和-eq之类的符号配对,而(())只能和>,<=之类的符号配对。


另外[[ expr1 && expr2 ]]等也是可以的。(||)


测试的简单总结:


(四)条件和循环语句

if语句:


  1. if [ $# -ne 1 ];then  
  2. echo Usage: $0 username  
  3.     exit 1   
  4. fi       
  5. echo $1  

注意:可执行语句块,如果为空,需要使用shell提供的空命令”:”,即冒号。该命令不做任何事情,只返回一个退出状态0。(shell下返回0为成功执行,返回1为失败)

case语句:


  1. #!/bin/bash  
  2.   
  3. case $1 in   
  4. A)   
  5.     echo this is A  
  6.     ;;  
  7. B|b)  
  8.     echo this is B or b  
  9.     ;;  
  10. *)  
  11.     echo others  
  12.     ;;  
  13. esac  

for 语句:

循环的执行过程:执行第一轮循环时,将list中的第一个词赋给循环变量,并把该词从list中删除,然后进入循环体,执行do和done之间的命令。下一次进入循环体时,则将第二个词赋给循环变量,并把该词从list中删除,依次列推。当list中的全部被移走后,循环就结束了。

位置参量使用 $*、“$*”、$@、"$@",可以省略in list ,此时使用"$@"

也可以使用如下形式:

  1. for((exp1;exp2;exp3))  
  2. do  
  3. ...  
  4. done  
打印字符三角形:

  1. #!/bin/bash  
  2.   
  3. if [ $# -ne 1 ];then   
  4.          echo 'usage:$0 <n> '  
  5.          exit 1  
  6. fi  
  7.   
  8. if [ $1 -lt "5" -o $1 -gt "15" ];then  
  9.          echo 'usage : $0 <n> '  
  10.          echo '  where 5<=n<=15'  
  11.          exit 1  
  12. fi  
  13.   
  14. for((i=0;i<$1;i++))  
  15. do  
  16.      for((j=0;j<$[$1-$i-1];j++))  
  17.      do  
  18.          echo -n " "  
  19.      done  
  20.        
  21.      for((j=0;j<$[2*$i+1];j++))  
  22.      do  
  23.          echo -n "*"  
  24.      done  
  25.   
  26.      echo -ne '\n'  
  27. done  

while语句:

until 语句:


select  列表:

select是个无限循环,因此要记住用break命令退出循环,或用exit命令终止脚本。也可以按ctrl+c退出循环。另外select经常和case联合使用。也可以省略in list,此时使用位置参量。

  1. #!/bin/bash  
  2.   
  3. PS3="favorite pet?"  
  4. select var in Dogs Cats Birds  
  5. do  
  6.   case $var in  
  7.    Dogs)  
  8.        echo Dogs are my favorite pet  
  9.        break  
  10.        ;;  
  11.    Cats)  
  12.        echo Cats are my favorite pet  
  13.        ;;  
  14.    Birds)  
  15.        echo Birds are my favorite pet  
  16.        ;;  
  17.    *)  
  18.        echo none of my favorite pet  
  19.        ;;  
  20.   esac  
  21.   break  
  22. done  

常用的字符串匹配:

shift命令

一般用于函数或者脚本程序参数的处理,特别是参数多于10以上的时候,将所有参数变量向下移动一个位置,$2变成$1,$3变成$2,依次递进,但是$0保持不变。

有趣的例子:

  1. #!/bin/bash  
  2. while [ “$1” != “” ]  
  3. do  
  4.   echo $*  
  5.   shift  
  6. done  

(五)捕获信号及其处理

锁屏程序:

  1. #!/bin/bash  
  2.   
  3. trap "nice_try" 2 3 15  
  4. TTY=`tty`  
  5.   
  6. nice_try()  
  7. {  
  8.     echo -e "\nNice try,the terminal stays locked"  
  9. }  
  10. stty -echo  
  11. echo -n "Enter your pasword to lock $TTY:"  
  12. read PASSWORD  
  13. clear  
  14. echo -n "Enter your password to unlocked $TTY:"  
  15. while :  
  16. do   
  17.     read RESPONSE   
  18.     if [ "$RESPONSE" = "$PASSWORD" ];then  
  19.          echo "unlocking ..."  
  20.          break  
  21.     fi  
  22.     clear  
  23.     echo "wrong password and terminal is locked ..."  
  24.     echo -n "Enter your password to unlock $TTY:"  
  25. done   
  26. stty echo   
stty -echo 是设置不回显的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值