Linux下shell的学习--之杂七杂八
来源:互联网 发布:淘宝网页制作模板 编辑:程序博客网 时间:2024/06/09 00:15
#!/bin/bash
#终端打印
echo 'HELLOWORLD!' #理解echo是否带有引号、单引号、双引号区别
echo "1\t2\t3" #echo默认会自动加一个回车,加-n可忽略
echo -e "1\t2\t3" #-e代表使用转义序列
printf "%-5s %-10.2f\n" aaa 12.3456 #-5代表左对齐,默认右对齐 .2指定保留2个小数位
var=15
echo val的值为:$var,长度为:${#var}
#echo $0 $SHELL
if [ $UID -ne 0 ]; then
echo current user not root
fi #if判断是否是超管,超管UID为0
#通过shell进行数学运算
no1=4
no2=5
echo $no1+$no2
let result=no1+no2 #let命令可以直接执行基本算数操作
echo $result
let no1++ #自加
let no2+=1 #简写
echo $no1 $no2
echo $[ no1 + no2 ]
echo "scale=2;sqrt(4*$no1)" | bc #bc数学运算的工具,scale=2将小数位个数设置为2
#文件描述符
echo "I am a boy!" >> aaa.bcp #重定向到文件,追加
echo "I am a boy!" > aaa.bcp #重定向到文件,先清空
ls + 2>> aaa.bcp #错误信息重定向到文件中
cmd 2>> bbb.bcp 1>>aaa.bcp #错误信息重定向到一个文件,输出执行内容定向到另一个文件
cat aaa.bcp | tee aab.bcp | cat -n #tee-写入文件,数据副本作为后续命令的stdin.tee -a 追加,默认覆盖.cat -n 为每行加行号
#数组:普通数组和关联数组--普通数组只能用整数做为数组索引,关联数组从Bash4.0版本开始支持
#定义普通数组方式--1、在单行中定义一列值来定义数组
array_var=(1 2 3)
#定义普通数组方式--2、索引-值
array_var[3]="ccc"
echo ${array_var[0]}
echo ${array_var[3]}
echo 数组的值为:${array_var[*]} 数组长度为:${#array_var[@]}
#定义关联数组需要显示声明
declare -A ass_array
#定义关联数组方式--1、利用内嵌索引-值
ass_array=([apple]=5.3 [orange]=6.2)
#定义关联数组方式--2、使用独立的索引-值
ass_array[peach]=7.9
echo apple:${ass_array[apple]}
echo 关联数组索引列表为:${!ass_array[@]} 数组值为:${ass_array[@]}
#时间
echo $date
echo $(date --date "20151211" +%s) #时间戳
echo $(date +%Y%m%d%H%M%S)
#示例1
echo -n Count:
tput sc #保存当前光标位置
count=0
while true
do
if [ $count -lt 3 ];
then let count++
#sleep 休眠1秒
sleep 1
tput rc #恢复光标到最后保存位置
tput el #清除到行尾
#执行时显示参数和命令
#set -x
echo -n $count
#禁止调试
#set +x
else
echo -e " "
break
fi
done
#示例2---调试
function DEBUG()
{
[ "$_DEBUG" == "on" ] && $@ || :
}
for i in {1..6} #从1-6
do
DEBUG echo $i
done
#命令序列输出到屏幕--1
cmd_output=$(ls | cat -n)
echo $cmd_output
#命令序列输出到屏幕--2
cmd_output=`ls | cat -n`
echo $cmd_output
#read -p "Enter input:" -s -n 2 var #-n读取n个字符 -s不回显 -p提示信息
#read -p "Enter input:" -s -t 5 -d ":" var #-t超时时间 -d 定界符
#echo -e "$var"
#if..else..
if [ 2 -lt 1 ];
then
echo "2<1"
elif [ 2 -lt 2 ];
then
echo "2<2"
else
echo "2>=2"
fi
[ 1 -gt 0 -a 2 -ge 2 ] && echo "1>0&&2>=2"; #&& 条件真,执行 -a-与 或者两个语句之间 用&&
[ 1 -lt 2 -o 4 -ne 4 ] || echo "1<2&&4!=4"; #|| 条件假,执行 -o-或 或者两个语句之间 用||
[ -f "/mnt" ] && echo "/mnt存在" # -f:给定的变量名包含正常的文件路径或文件名,返回真
[ -x "/mntt" ] && echo "/mntt可执行" #-x:给定的变量名包含文件可执行,返回真
[ -d "/mntt" ] && echo "/mntt目录存在" #-d:给定的变量名包含的是目录,返回真
[ -e "/mntt" ] && echo "/mntt文件存在" #-e:给定的变量名包含的文件存在,返回真
[ -r "/mntt" ] && echo "/mntt可读" #-r:给定的变量名包含的文件可读,返回真 -w 可写
[[ "aaa" > "bbb" ]] && echo "aaa>bbb" #字符串比较时最好用双中括号 = == != > < 且符号前后各有一个空格
[[ -z "" ]] && echo "空字符" # -z 空字符
[[ -n "" ]] && echo "空字符" # -n 非空字符
if test "a" = "b" ; then echo "a=b";fi #test 用于执行条件检测,替代[]
file_jpg="sample.jpg"
name=${file_jpg%.*} # %从右先坐找删除%后的通配符匹配的字符串,非贪婪, %%贪婪
extension=${file_jpg#*.} # #从左向右找删除#后的通配符匹配的字符串,非贪婪, ##贪婪
echo 文件名为:$name 后缀名为: $extension
dd if=/dev/zero of=junk.bcp bs=1M count=2 #创建1M * 2大小的文件 /dev/zero 是个字符设备,返回0字节
rm -rf junk.bcp
grep -n -i -e "Boy" -e "a" aaa.bcp --color=auto #-n 打印行数 -i 忽略大小写
echo I am a boy | grep -b -o -E "[a-z]+" #-E 正则 -o 只输出匹配的部分 -b偏移
echo -e "1 2 3 \nhell\n5 6" | egrep -c "[0-9]" #-c 匹配字符串的行数
echo -e "1 2 3 \nhell\n5 6" | egrep -o "[0-9]" |wc -l #匹配单词的个数
echo -e "aaaaabbbbb" | grep -e "aaa" -e "bbb" #-i 忽略大小写,-e 指定多个表达式
#-r 递归 --include 搜索指定文件 *.{idx,bcp}={*.idx *.bcp} --exclude 排除
grep "mode" . -r --include *.{idx,bcp}
echo -e "1\n2\n3\n4\n5\n6\n7" > grep.bcp
grep -A 2 "4" grep.bcp #-A 匹配文本行及之后的n行
grep -B 2 "4" grep.bcp #-B 匹配文本行及之前的n行
grep -C 2 "4" grep.bcp #-C 匹配文本行及之前和之后的n行
rm -rf grep.bcp
grep -q "boys" aaa.bcp #静默输出,不在向标准输出打印东西,只是返回退出状态
if [ $? -eq 0 ]; then
echo "boy is in aaa.bcp"
else
echo "boy is not in aaa.bcp"
fi
echo "0-$0 1-$1 2-$2"
echo -e "1\t2\t3" > cut.bcp
cut -f 2,3 cut.bcp
cut -f 1 --complement cut.bcp
cut -f 2 -d " " cut.bcp
sed -i 's/3/Boy/g' cut.bcp #-i 替换结果应用于源文件->只是替换没一行中第一处 g替换全部
sed 's/2/5/;s/1/6/' cut.bcp #多个sed 用; 也可sed a | sed b
cat cut.bcp
#NR:执行过程中当前行数,NF:当前行的字段数,$0第一列
echo -e "1 2 3\na b c\nA B C" | \
awk 'BEGIN{ print "START" } { print $0 $1 $2"-->fieldnum:"NF} END{ print "END";print "all_lines:"NR}'
ls -l | awk '{ print $4":"$9}'
#外部变量传递给awk
var1=1;var2=2
awk '{print v1 v2}' v1=$var1 v2=$var2 cut.bcp
#-F 指定定界符
awk -F '\t' '{ print $NF }' cut.bcp
#迭代单词中每个字符, ${string:start_pos:No_of_characters}
word="abcdefg"
for ((i=0;i<${#word};i++))
do
echo -n -e "${word:i:1}\t"
done
echo
#while循环读文件内容
while read line
do
echo $line
done < cut.bcp
#shift 3 将参数左移3个 $4-->$1 $5-->$2,原值丢弃
while true;do
[ $# -eq 0 ] && break
echo "$1--->$#"
shift
#终端打印
echo 'HELLOWORLD!' #理解echo是否带有引号、单引号、双引号区别
echo "1\t2\t3" #echo默认会自动加一个回车,加-n可忽略
echo -e "1\t2\t3" #-e代表使用转义序列
printf "%-5s %-10.2f\n" aaa 12.3456 #-5代表左对齐,默认右对齐 .2指定保留2个小数位
var=15
echo val的值为:$var,长度为:${#var}
#echo $0 $SHELL
if [ $UID -ne 0 ]; then
echo current user not root
fi #if判断是否是超管,超管UID为0
#通过shell进行数学运算
no1=4
no2=5
echo $no1+$no2
let result=no1+no2 #let命令可以直接执行基本算数操作
echo $result
let no1++ #自加
let no2+=1 #简写
echo $no1 $no2
echo $[ no1 + no2 ]
echo "scale=2;sqrt(4*$no1)" | bc #bc数学运算的工具,scale=2将小数位个数设置为2
#文件描述符
echo "I am a boy!" >> aaa.bcp #重定向到文件,追加
echo "I am a boy!" > aaa.bcp #重定向到文件,先清空
ls + 2>> aaa.bcp #错误信息重定向到文件中
cmd 2>> bbb.bcp 1>>aaa.bcp #错误信息重定向到一个文件,输出执行内容定向到另一个文件
cat aaa.bcp | tee aab.bcp | cat -n #tee-写入文件,数据副本作为后续命令的stdin.tee -a 追加,默认覆盖.cat -n 为每行加行号
#数组:普通数组和关联数组--普通数组只能用整数做为数组索引,关联数组从Bash4.0版本开始支持
#定义普通数组方式--1、在单行中定义一列值来定义数组
array_var=(1 2 3)
#定义普通数组方式--2、索引-值
array_var[3]="ccc"
echo ${array_var[0]}
echo ${array_var[3]}
echo 数组的值为:${array_var[*]} 数组长度为:${#array_var[@]}
#定义关联数组需要显示声明
declare -A ass_array
#定义关联数组方式--1、利用内嵌索引-值
ass_array=([apple]=5.3 [orange]=6.2)
#定义关联数组方式--2、使用独立的索引-值
ass_array[peach]=7.9
echo apple:${ass_array[apple]}
echo 关联数组索引列表为:${!ass_array[@]} 数组值为:${ass_array[@]}
#时间
echo $date
echo $(date --date "20151211" +%s) #时间戳
echo $(date +%Y%m%d%H%M%S)
#示例1
echo -n Count:
tput sc #保存当前光标位置
count=0
while true
do
if [ $count -lt 3 ];
then let count++
#sleep 休眠1秒
sleep 1
tput rc #恢复光标到最后保存位置
tput el #清除到行尾
#执行时显示参数和命令
#set -x
echo -n $count
#禁止调试
#set +x
else
echo -e " "
break
fi
done
#示例2---调试
function DEBUG()
{
[ "$_DEBUG" == "on" ] && $@ || :
}
for i in {1..6} #从1-6
do
DEBUG echo $i
done
#命令序列输出到屏幕--1
cmd_output=$(ls | cat -n)
echo $cmd_output
#命令序列输出到屏幕--2
cmd_output=`ls | cat -n`
echo $cmd_output
#read -p "Enter input:" -s -n 2 var #-n读取n个字符 -s不回显 -p提示信息
#read -p "Enter input:" -s -t 5 -d ":" var #-t超时时间 -d 定界符
#echo -e "$var"
#if..else..
if [ 2 -lt 1 ];
then
echo "2<1"
elif [ 2 -lt 2 ];
then
echo "2<2"
else
echo "2>=2"
fi
[ 1 -gt 0 -a 2 -ge 2 ] && echo "1>0&&2>=2"; #&& 条件真,执行 -a-与 或者两个语句之间 用&&
[ 1 -lt 2 -o 4 -ne 4 ] || echo "1<2&&4!=4"; #|| 条件假,执行 -o-或 或者两个语句之间 用||
[ -f "/mnt" ] && echo "/mnt存在" # -f:给定的变量名包含正常的文件路径或文件名,返回真
[ -x "/mntt" ] && echo "/mntt可执行" #-x:给定的变量名包含文件可执行,返回真
[ -d "/mntt" ] && echo "/mntt目录存在" #-d:给定的变量名包含的是目录,返回真
[ -e "/mntt" ] && echo "/mntt文件存在" #-e:给定的变量名包含的文件存在,返回真
[ -r "/mntt" ] && echo "/mntt可读" #-r:给定的变量名包含的文件可读,返回真 -w 可写
[[ "aaa" > "bbb" ]] && echo "aaa>bbb" #字符串比较时最好用双中括号 = == != > < 且符号前后各有一个空格
[[ -z "" ]] && echo "空字符" # -z 空字符
[[ -n "" ]] && echo "空字符" # -n 非空字符
if test "a" = "b" ; then echo "a=b";fi #test 用于执行条件检测,替代[]
file_jpg="sample.jpg"
name=${file_jpg%.*} # %从右先坐找删除%后的通配符匹配的字符串,非贪婪, %%贪婪
extension=${file_jpg#*.} # #从左向右找删除#后的通配符匹配的字符串,非贪婪, ##贪婪
echo 文件名为:$name 后缀名为: $extension
dd if=/dev/zero of=junk.bcp bs=1M count=2 #创建1M * 2大小的文件 /dev/zero 是个字符设备,返回0字节
rm -rf junk.bcp
grep -n -i -e "Boy" -e "a" aaa.bcp --color=auto #-n 打印行数 -i 忽略大小写
echo I am a boy | grep -b -o -E "[a-z]+" #-E 正则 -o 只输出匹配的部分 -b偏移
echo -e "1 2 3 \nhell\n5 6" | egrep -c "[0-9]" #-c 匹配字符串的行数
echo -e "1 2 3 \nhell\n5 6" | egrep -o "[0-9]" |wc -l #匹配单词的个数
echo -e "aaaaabbbbb" | grep -e "aaa" -e "bbb" #-i 忽略大小写,-e 指定多个表达式
#-r 递归 --include 搜索指定文件 *.{idx,bcp}={*.idx *.bcp} --exclude 排除
grep "mode" . -r --include *.{idx,bcp}
echo -e "1\n2\n3\n4\n5\n6\n7" > grep.bcp
grep -A 2 "4" grep.bcp #-A 匹配文本行及之后的n行
grep -B 2 "4" grep.bcp #-B 匹配文本行及之前的n行
grep -C 2 "4" grep.bcp #-C 匹配文本行及之前和之后的n行
rm -rf grep.bcp
grep -q "boys" aaa.bcp #静默输出,不在向标准输出打印东西,只是返回退出状态
if [ $? -eq 0 ]; then
echo "boy is in aaa.bcp"
else
echo "boy is not in aaa.bcp"
fi
echo "0-$0 1-$1 2-$2"
echo -e "1\t2\t3" > cut.bcp
cut -f 2,3 cut.bcp
cut -f 1 --complement cut.bcp
cut -f 2 -d " " cut.bcp
sed -i 's/3/Boy/g' cut.bcp #-i 替换结果应用于源文件->只是替换没一行中第一处 g替换全部
sed 's/2/5/;s/1/6/' cut.bcp #多个sed 用; 也可sed a | sed b
cat cut.bcp
#NR:执行过程中当前行数,NF:当前行的字段数,$0第一列
echo -e "1 2 3\na b c\nA B C" | \
awk 'BEGIN{ print "START" } { print $0 $1 $2"-->fieldnum:"NF} END{ print "END";print "all_lines:"NR}'
ls -l | awk '{ print $4":"$9}'
#外部变量传递给awk
var1=1;var2=2
awk '{print v1 v2}' v1=$var1 v2=$var2 cut.bcp
#-F 指定定界符
awk -F '\t' '{ print $NF }' cut.bcp
#迭代单词中每个字符, ${string:start_pos:No_of_characters}
word="abcdefg"
for ((i=0;i<${#word};i++))
do
echo -n -e "${word:i:1}\t"
done
echo
#while循环读文件内容
while read line
do
echo $line
done < cut.bcp
#shift 3 将参数左移3个 $4-->$1 $5-->$2,原值丢弃
while true;do
[ $# -eq 0 ] && break
echo "$1--->$#"
shift
done
#case的应用
case $1 in
a) echo aaa;;
b) echo bbb;;
*) echo ccc
esac
rm -rf aaa.bcp aab.bcp bbb.bcp cut.bcp
1 0
- Linux下shell的学习--之杂七杂八
- IOS学习之协议protocol - 杂七杂八
- Linux学习-之-shell命令
- Linux下的多线程编程(三) 杂七杂八
- shell学习之-shell调用shell
- linux下shell学习
- 学习了解Linux下的Shell
- Linux系统下的shell基础学习
- linux下的SHELL脚本学习
- Linux 下的 shell 编程之变量
- Linux 下的 shell 编程之 输入输出
- Linux shell学习之:unix/linux shell的发展历程
- shell的一些杂七杂八的东西
- 杂七杂八、linux命令的分类
- ROS学习过程的杂七杂八
- 日常杂七杂八的学习笔记
- Linux之shell学习
- 《Linux学习》之shell
- Android常见的按钮监听器实现
- leetcode之Linked List Cycle
- 【bzoj2425】【HAOI2010】【计数】【组合数学】
- ubuntu 安装jre错误
- Spring mvc的整体流程(二)
- Linux下shell的学习--之杂七杂八
- CAST,CONVERT,
- hdu 1175 连连看
- 使用shiro的session后,HttpSession.getServletContext() 获取一直是null的解决方法
- 微信OAuth授权获取用户OpenId-JAVA
- Java Web开发之You don’t have permission to access /~{username}/ on this server解决方案
- 从键盘输入一个字符,判断其类型
- Java web开发(2)——Tomcat服务器
- phonegap(cordova) 自定义插件代码篇(五)----android ,iOS 集成微信登陆