Linux Shell练习 - hackerrank
2021/10/3 7:10:15
本文主要是介绍Linux Shell练习 - hackerrank,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 通用语法
- 插入序列
- 获取输入
- for loop 打印1-50
- 输入两个数比较大小
- YN case
- 判断三角形类型
- 输入表达式计算
- 求平均数
- 输出两个数的加减乘除
- cut
- tr
- 数组
- 读入数组
- 分片
- 筛选
- 拼接
- 替换
- 孤独的整数
通用语法
插入序列
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 loop 打印1-50
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
YN case
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))
cut
典型用法:
$ 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标志一起使用。
tr
# 压缩重复相邻字符 $ 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
这篇关于Linux Shell练习 - hackerrank的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法