# shell 学习笔记 **Repository Path**: fengzi6/shell_learning_notes ## Basic Information - **Project Name**: shell 学习笔记 - **Description**: shell 学习笔记 - **Primary Language**: Shell - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-10-23 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # shell 学习笔记 192.168.174.128 ## 1.shell脚本的执行方法 ~~~ 1. bash script-name 或 sh script-name 第一种方法是脚本文件本身没有可执行权限时 2. ./path/script-name 或 ./script-name 第二种方法需要有可执行权限 3. source script-name 或 . script-name (注意符号“.”与 script-name之间有空格) 第三种方法当我们需要在一个脚本中使用另一个脚本中的变量的时候,变量chars在当前shell中也是有效的 ~~~ ---- 打开终端。就会出现一个提示符 username@hostname$ $表示普通用户 root@hostname# #表示超级管理员 linux最高用户 shell 脚本通常第一行以 #! 其实的文本文件。如下 #!/bin/bash 解释器 路径 # 指明注释开始, 直到行尾 $echo "hello world !" #执行错误, -bash: !": event not found 双引号 带解析功能 如果要双引号需要 \ echo "hello world \!" # 要想输出 ! 可以使用 单引号 $echo 'hello world !' echo -e "包含转义字符的字符串" 变量 var = "hello world" echo $var 或者 echo ${var} 8.命令排序 && || 具备逻辑判断 ./configure && make && make install (命令返回值 echo $?) mkdir /var/111/222/333 && echo ok mkdir -p /var/111/222/333 && echo ok ls /home/111/222/333/444 || mkdir -p /home/111/222/333/444 [ -d /home/111/222/333/444 ] || mkdir -p /home/111/222/333/444 9.shell 的通配符 [元字符] * 匹配任意多个字符 ls *.txt ? 匹配任意一个字符 ls d?ta.txt [] 匹配括号中任意一个字符 () 在子 shell 中执行(cd /boot;ls) (umask 077; touch file1000) {} 集合 touch 彩色打印 \e[1;31m : 设置颜色 \e[0m:取消颜色 echo -e "\e[1;31m this is red text \e[0m" $? 上一个命令的返回值 0 表示成功 $1 第一个参数 (位置变量) $2 第二个参数 (位置变量) 3. 位置变量 $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} 4. 预定义变量 $0 脚本名 $* 所有的参数 $@ 所有的参数 $# 参数的个数 $$ 当前进程的 PID $! 上一个后台进程的 PID $? 上一个命令的返回值 0 表示成功 了解$*和$@区别 5.read 从键盘读入变量名 read -p "Please input a ip:" 变量名 #提示信息 read -t 5 -p "等待5秒输入" 变量名 #等待5秒输入 read -n 5 name // 输入5个字符 "" 弱引用 '' 强引用 `` 反引号 表示这里面的命令先执行 touch `date +%F`_file.txt 创建一个当前日期的文件 ---- ## 变量的运算 --- 1. 整数运算 方法一:expr expr 1 + 2 expr $num1 + $num2 + - \* / % 方法二:$(()) echo $(($num1+$num2)) + - * / % echo $((num1+num2)) echo $((5-3*2)) echo $(((5-3)*2)) echo $((2**3)) sum=$((1+2)); echo $sum 方法三:$[] echo $[5+2] + - * / % echo $[5**2] 方法四:let let sum=2+3; echo $sum let i++; echo $i 2. 小数运算 echo "2*4" |bc echo "2^4" |bc echo "scale=2;6/4" |bc awk 'BEGIN{print 1/2}' echo "print 5.0/2" |python --- ## 变量内容的删除和替换(扩展) ---- # url=www.sina.com.cn # echo ${#url} 获取变量值的长度 15 # echo ${url} 标准查看 www.sina.com.cn # echo ${url#*.} 从前往后,最短匹配 sina.com.cn # echo ${url##*.} 从前往后,最长匹配 贪婪匹配 cn # echo ${url##*.} 从前往后,最长匹配 贪婪匹配 cn # url=www.sina.com.cn # echo ${url} www.sina.com.cn # echo ${url%.*} 从后往前,最短匹配 www.sina.com # echo ${url%%.*} 从后往前,最长匹配 贪婪匹配 www # url=www.sina.com.cn # echo ${url#a.} www.sina.com.cn # echo ${url#*sina.} com.cn # echo $HOSTNAME tianyun.1000phone.com # echo ${HOSTNAME%%.*} tianyun 索引及切片 # echo ${url:0:5} # echo ${url:5:5} # echo ${url:5} ----