shell攻略第一章之小试牛刀
这次再学shell,主要是学习《linux shell脚本攻略》这本书,他主要是讲了linux的实战,默认读者已经拥有了一定的shell脚本的语法基础能力,希望可以从中领略到脚本的魅力。
重定向脚本内部的文本块
#/bin/bash
2 cat << EOF > log.txt
3 log file header
4 this is a test file log
5 EOF
该代码可以将文本添加到log.txt 中,EOF之间的文本被当作整体进行处理
普通数组的定义与获取
# 定义数组
array_var=(1 2 3 34 4);echo ${array_var[1]}
# 打印整个数组
array_var=(1 2 3 34 4);echo ${array_var[*]}
# 打印数组长度,加#获取
array_var=(1 2 3 34 4);echo ${#array_var[*]}
关联数组的使用,关联数组可以使用文本作为key
#!/bin/bash
2 # 声明一个变量
3 declare -A frute
4
5 # 定义数组
6 frute=([apple]='111' [orange]='222')
7
8 # 获取数组中的值
9 echo "apple price = ${frute[apple]}"
10
11 # 获取数组中的key
12 echo "${!frute[*]}"
隐藏输入
#!/bin/bash
2
3 echo -e "enter a password"
4
5 stty -echo
6 read password
7 stty echo
8 echo
9 echo password read.password is ${password}
计数,每秒count+1
#!/bin/bash -xv
echo -n count:
# 存储光标位置
tput sc
count=0;
while true;
do
if [ $count -lt 40 ];
then let count++;
# 睡1秒
sleep 1;
# 恢复光标位置
tput rc
# 清除从当前光标到行尾的所有内容
tput ed
# 输出 count
echo -n $count;
else exit 0;
fi
done
函数的定义
#!/bin/bash
# 定义函数
function fname()
{
echo $1,$2
echo "$@"
echo "$*"
return 0
}
# 参数的定义
# $1是第一个参数
# $2是第二个参数
# $n是第n个参数
# "$@" 被扩展成"$1""$2""$3"等
# $? 可以判断命令执行的状态,成功为0
fname aa bb
字段分隔符IFS,IFS是shell中的默认分隔符
1 #!/bin/bash
2 # 定义字符串
3 data="apple,orange,my"
# 记录就的分隔符
4 oldIFS=$IFS
5 echo $oldIFS
6 IFS=,
7 for item in $data;
8 do
9 echo item: $item
10 done
11 IFS=$oldIFS
shell中的条件判断 格式[ var -eq 10 ]
#!/bin/bash
# shell中的条件
# -eq 等于
# -gt 大于
# -lt 小于
# -ge 大于或等于
# -le 小于或等于
# [$var -ne 0 -a $var -gt 2] 逻辑与-a
#[ $var -ne 0 -o $var -gt 2 ] 逻辑或 -o
# -f 判断是文件
# -x 判断可执行
# -d 判断是目录
# -e 判断文件存在
# 字符串比较 [[ $a=$b ]]
read的使用,read可以从stdin或者指定的文本中读取
#!/bin/bash
# read 是一个很重要的命令
# 从输入中读取n个字符并存入variable_name
# read -n 2 var
# echo $var
read -p "enter input:" var
echo $var