shell 编程 小结

自己在工作中用到的shell知识总结:

1. 变量
声明:
declare -ar ARRAYNAME
declare -r STRING="I think this gay must be crazy !"
-a 数组
-r 只读

$n $1 表示第一个参数,$2 表示第二个参数 ...
$# 命令行参数的个数
$0 当前程序的名称
$? 前一个命令或函数的返回码
$* 以"参数1 参数2 ... " 形式保存所有参数
$@ 以"参数1" "参数2" ... 形式保存所有参数
$$ 本程序的(进程ID号)PID
$! 上一个命令的PID


2. 数组
declare -a ARRAYNAME
ARRAY=(value1 value2 ... valueN) //数组赋值,各成员之间用 “空格” 分隔

如果没有定义索引号,默认是从0开始

i=5
ARRAYNAME[0]="bitch" //数组 赋值
ARRAYNAME["$i"]="son" //数组 赋值
$ARRAYNAME[0] //第一个元素的值
count="${#ARRAYNAME[@]}" //获取数据成员的个数 //数组的长度
count="${#ARRAYNAME[*]}" //获取数据成员的个数 //数组的长度
${#ARRAYNAME[3]} //第四个元素的长度
${ARRAYNAME[@]} //数组的全部元素

unset ARRAYNAME //删除数组变量,实际上是将ARRAYNAME的值赋空值


使用循环读出数组中的内容:

print_arr(){
count= "${#array[@]}" //数组的长度
i=0
while [ i -lt $count ]
do
tmp="$array["$i"]"
echo "$tmp"
let i++ //i 加1,确保退出循环的条件
}


3. 逐行读取文件中并去除每行中需求的部分,并且放在数组中

方法一:
readfile(){
#$1参数是传入的file的路径
file=$1
count=0
while read line
do
#分析每行,获取有用的部分,awk使用separator作为分隔符,将字符串
#分隔成几部分,这里我们获取第二部分,注意:引号的使用,单引号,
#双引号

tmp=`echo "$line" | awk -F'separator' '{print $2}'`

#消除两边的空格
tmp=`echo "$tmp" | sed -e 's/^ *//' -e 's/ *$//'`

if [ "$tmp" != "" ]
then
ARR["$count"]="$tmp"
let count++
fi
done < "$file"
#读取$file 中的内容
}

方法二:

cat "file" | while read line
do
echo $line
done


4. case 嵌套(相当重要的分号,嵌套时不要忘了)

例子:

case "$char" in
a)
case "$num" in

1|2|3|4|5) ##另一种写法,很好 :wink:
echo "$num"
;;
0)
echo "error"
;;
esac ##不要忘记了
;; ## 相当重要的分号,嵌套时不要忘了 :cry:
b)
case "$string" in

ni|wo|ta)
echo "do something"
;;
other)
echo "do something"
;;
esac ##不要忘记了
;; ##不要忘记了
*)
echo “do something ”
;;[color=blue][/color]
esac

5.格式化输出,很笨的方法

format_print (){
printf %7s "$1"
printf %8s "$2"
printf %-s " "
printf %-s "$3"
echo ""
}
数字代表 所占用的宽度,s表示字符(还有其他的自己找资料),,默认是右对齐,“-”表示右对齐,不足用空格表示,printf命令是不换行的,手工添加换行

6.函数

##定义
f(){
name=$1 //传参数
age=$2
echo“do something ”
}

##调用

f “leo” 23 ##参数之间用空格隔开


7.其他

调用外部命令获取其返回值

value=`pwd`
value=$(pwd)
string=$(cat file)

文件开头第一行
#!/bin/sh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值