shell编程笔记2

1、i++:是先赋值,然后再自增;
      ++i:是先自增,后赋值。
  用代码表示就是:
  若 a = i++; 则等价于 a=i;i=i+1;
  而 a = ++i; 则等价于 i=i+1;a=i;

2、正则表达式: [[ $j =~ ^[0-9]+$ ]]

3、vim的块移动

  先按shift+v  选中要移动的块      再按shift+</> 进行左右移动

 4、()子shell执行

  (())  数值比较  运算c语言

  $() 命令替换  与``反引号一样

  $(()) 整数运算

  [ ] 条件测试

  [[]] 条件测试    支持正则表达式   =~

  $[]  整数运算

 

5、判断是否为目录==》test -d 路径     等同于   [ -d 路径  ]  (   [相当于test  )

5、eg:[ 1 -gt 2 -a 4 -gt 10 ]  ==>-a表示and    -o表示or的意思

6、如果是[ [ ] ] 中间只能用&&和||

 7、seq  :eg  :seq  4===》1到4      seq 3    5   ==》3,4,5       seq   1  2     5   ===》1  3   5

8、useradd  xx ;echo "123" |passwd --stdin  xx    --->添加用户并创建密码

9、case格式:

  case  "xx" in

    xx)   xxx

    ;;

    bb)   bbb

    ;;

    *)  xxxx

  esac

 10、vim中使用normal模式下的 先按shift+v进行选中    按d删除选中的,p粘贴  ,shift+<> 进行块的左右移动

   对于选中的文本进行如下按键:

    (1.1)d   ------ 剪切操作

(1.2)y   -------复制操作

(1.3)p   -------粘贴操作

(1.4)^  --------选中当前行,光标位置到行首(或者使用键盘的HOME键)

(1.5)$  --------选中当前行,光标位置到行尾(或者使用键盘的END键)

11、trap "动作" HUP INT OUIT TSTP--->捕捉键盘相应信号(用于按ctrl+c退出等)

12、

  for xxx

  do

    {

    xxx

    }&  ----->红色部分表示后台运行,当多个循环运行速度慢时,可以使用这个 ,相当于并行进程

  done

 13:重新定义分隔符:默认for循环读取文件都是按空格或tab分隔,要想变成回车分隔使用   IFS=$'\n'    或者   IFS=‘ 回车’

14:while的例子:

#!/usr/bin/bash
while read user
do
adduser $user
echo "添加成功$user"
done <user.txt

 

15、并发控制   文件目录在/tmp/xxx,通过mkfifo创建

  管道的打开:exec 8<> xxx.fifo

        rm -rf xxx.fifo    虽然删除了但是管道并没有释放

        通过read -u 8    读取管道8

        echo >&8   往管道中添加8,用于循环

eg:

  thread=5

  for i in  `seq $thread`

  do

    echo >&8

  done

  for i in {1..200}

  do 

    read -u 8

    xxxx

    echo >&8  //放回管道

  done

 

16、数组:declare -A 定义关联数组    -a普通数组

    数组定义:declare -a books=(a b c d)  或    declare -A books=([name]=name1 [sex]=gril)

    获取:echo ${books[下标]}   或者 echo ${book[name]}

  数组个数:echo ${#info[@]}

  获取数组所有数据:echo ${info[@]}

  获取数组索引:echo ${!info[@]}

    eg:echo ${info[@]:1}-->从数组1开始     echo ${info[@]:1:2}-->下标1开始访问2个元素

 17、

         

 

          

 

myfunction(){
for i in `seq $1`
do
let total=$i+total
done
echo "total:$total"    ===》当做返回值赋值给result
}
result=`myfunction $1`
echo $result

 

18、函数传数组参数例子

#!/usr/bin/bash
num=(1 2 3 4 5 6)
test(){
for i in $@  或$*
do
let total+=$i
done
echo "$total"
}
info=`test ${num[*]}`
echo "$info"

19、函数返回数组   echo  ${arr[*]}

20、shift的使用

while [  $# -ne 0 ]

do

 let sum+=$1

  shift====>执行完后参数想左移动原先$2变$1

done

posted on 2021-12-06 15:09  bruce.sharp  阅读(123)  评论(0)    收藏  举报