Output Format
1 3 5 . . . . . 99
解决方案:
for i in $(seq 1 2 99) do echo $i done
Sample Input 0
Dan
Sample Output 0
Welcome Dan
解决方案:
read userName echo "Welcome ${userName}"
for i in {1..50} do echo $i done
read x read y if [[ $x == $y ]]; then echo "X is equal to Y" elif [[ $x > $y ]]; then echo "X is greater than Y" else echo "X is less than Y" fi
read c case $c in [yY]): echo "YES" ;; [Nn]): echo "NO" ;; esac
read a read b read c # 空格matters if [[ $a == $b && $a == $c ]]; then echo "EQUILATERAL" elif [[ $a == $b || $a == $c || $b == $c ]]; then echo "ISOSCELES" else echo "SCALENE" fi
read exp # 直接echo 会存在四舍五入问题 printf "%.3f" $(echo "scale=5; $exp"|bc)
Sample Input
4 #个数 1 2 9 8
Sample Output
5.000
read n sum=0 for i in $(seq 1 $n); do read tmp sum=$((sum+tmp)) done printf "%.3f" $(echo "scale=5; $sum/$n"|bc)
read a read b echo $((a+b)) echo $((a-b)) echo $((a*b)) echo $((a/b))
典型用法:
$ cat /etc/passwd | head -n5 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin $ cat /etc/passwd | head -n5 | cut -d: -f 7 /bin/bash /sbin/nologin /sbin/nologin /sbin/nologin /sbin/nologin
-b :输入每行第n个字符(半角,注意如果有中文将乱码)。可以
cut -b 2,4-7
cut -b 13-
代表到末尾-c :输入每行第n个字符(适用中文)。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符(例如中文)。仅和-b标志一起使用。
# 压缩重复相邻字符 $ echo aaabbbaacccfddd | tr -s 'abcdf' abacfd # 替换 $ echo aaabbbaacccfddd | tr 'a-c' 'A-C' AAABBBAACCCfddd # 删除 $ echo aaabbbaacccfddd | tr -d 'a' bbbcccfddd # c 补集 $ echo "hello 12 world" | tr -d -c '0-9' $
用下标读取某个元素的值
arr_element2=${arr_name[2]},即形式:${数组名[下标]}
用#获取数组长度:
${#数组名[@]} 或${#数组名[*]} arr_len=${#arr_name[*]}或${#arr_name[@]}
用#获取某元素值的长度
arr_elem_len=${#arr_name[index]} #index为数组下标索引
删除数组
删除数组某个元素:unset arr_name[index]
删除整个数组:unset arr_number
数组分片访问
分片访问形式为:${数组名[@或*]:开始下标:偏移长度}
有用的数组扩展
数组支持”+=“赋值运算符,利用这一点可以通过这种方式往一个已知数组中更方便的添加元素,特别是往空数组中填充元素时非常有用。
n=0 while read a; do array[n]=$a; n=$((n+1)) done echo ${array[@]}
echo ${array[@]:3:5}
Sample Input
Namibia Nauru Nepal Netherlands NewZealand Nicaragua Niger Nigeria NorthKorea Norway
Sample Output
Netherlands NewZealand Nicaragua Niger Nigeria
echo ${array[@]/*[aA]*/}
过滤含有a或A的字符。
拼接三次
array=($(cat)) ret=(${array[@]} ${array[@]} ${array[@]}) echo ${ret[@]}
echo ${array[@]/[A-Z]/.}
数组中元素A-Z都替换成.
。
输入N,然后是N个数,选出其中的奇数个数的那个。
read N # 获取数组[1 2 2 1 2] array=($(cat)) # 转化为字符串"1 2 2 1 2" str=${array[@]} # 字符串替换"1^2^2^1^2" # 然后计算表达式,就是剩下的那个 echo $((${str// /^}))
echo ${string/23/bb} //abc1bb42341 替换一次
echo ${string//23/bb} //abc1bb4bb41 双斜杠替换所有匹配
echo ${string/#abc/bb} //bb12342341 #以什么开头来匹配
本文同步发布于orzlinux.cn