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
浙公网安备 33010602011771号